gpt4 book ai didi

c - 如何修复 pid 取反时 kill 函数的 'No such process' 错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:12:35 26 4
gpt4 key购买 nike

正在尝试为 SIGINT 信号编写信号处理程序。我希望将新的 SIGINT 发送到由 pid 指定的进程组。 (使用 signals.h 中的“kill”函数)。

kill 函数的联机帮助页 man 2 kill 指出负 pid 将向整个进程组发送信号。

以前我有这个只向 pid 发送信号并且工作正常。信号已发送,进程已做出正确 react 。

void handle_sigint(int sig){
pid_t pid = getprocesspid();
if(kill(pid, sig) < 0){
//Not taken
}
}

但是,当我否定 pid 时,kill 函数返回 -1 并出现“没有这样的进程”错误。

void handle_sigint(int sig){
pid_t pid = getprocesspid();
if(kill(-pid, sig) < 0){
//Errors out
}
}

这对我来说真的很奇怪。我可以验证进程的 pid 是否正确。但是,每次我否定 pid 后程序崩溃

最佳答案

kill(-pid, sig) 会将信号发送到进程组 pid。如果 ( Posix ):

kill 将因 ESRCH 而出错

ESRCH

No process or process group can be found corresponding to that specified by pid.

并非所有进程 ID 都是进程组 ID。

您可以使用 pid_t getpgid(pid_t pid) 获取进程的进程组 ID ,即

pid_t pid = getprocesspid();
pid_t pgid = getpgid(pid);

if (pgid == -1) {
// getpgid errored
}

if (kill(-pgid, sig) < 0){
//Errors out
}

关于c - 如何修复 pid 取反时 kill 函数的 'No such process' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55561984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com