【发布时间】:2019-04-07 17:51:06
【问题描述】:
正在尝试为 SIGINT 信号编写信号处理程序。我希望将新的 SIGINT 发送到由 pid 指定的进程组。 (使用signals.h中的'kill'函数)。
kill 函数man 2 kill 的联机帮助页表明,否定的 pid 将向整个进程组发送信号。
以前我有这个,它只向 pid 发送信号,它工作正常。信号已发送,进程正确响应。
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 后,程序都会崩溃
【问题讨论】:
-
嘿guenni_90,好点,但我不这么认为。确实有一个
kill命令作为 bash 可执行文件/内置 idk。但是 c 的signal.h库提供了kill(pid_t pid, int sig)函数来发送信号。这个函数的手册页可以用man 2 kill查看。 -
我相信的问题是你认为你可以否定 any pid 并且它将被发送到进程组 - 但并非所有进程 id 都是进程组 id!跨度>
-
请不要添加多语言标签,只添加您实际编程语言的标签。即使解决方案可以用于多种语言。
-
@someprogrammerdude 注意,以后的帖子会反映这一点。