如何修复 kill 函数对 pid 求反时的 'No such process' 错误
How to fix 'No such process' error from kill function on negation of pid
正在尝试为 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 函数 returns -1 并出现 "No such process" 错误。
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
}
正在尝试为 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 函数 returns -1 并出现 "No such process" 错误。
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
}