如何杀死一个PID不断变化的进程?

我知道我可以使用这个技巧if (fork()) exit(0); 改变当前进程的PID。 所以,下面的程序会有一个很快改变的pid。 如何杀死这样的进程? 有没有比执行大量killall procname更好的方法,直到能够在fork之前运行kill() ? 我知道这不是一个“进程”,但是每个进程只运行几微秒。

 #include <unistd.h> #include <stdlib.h> #include <stdio.h> int main() { pid_t self = getpid(); while (1) { if (fork()) exit(0); if (self + 10000 < getpid()) break; // Just to kill it after some time usleep(1000); } return 0; } 

我发现列出进程的唯一方法是执行ps -A | grep procname ps -A | grep procname几次,直到显示一些输出。 为什么不总是列出的过程?

Solutions Collecting From Web of "如何杀死一个PID不断变化的进程?"

这样的过程被系统管理员称为“彗星”。

进程组ID(PGID)在fork上不会改变,所以你可以通过向进程组发送一个信号(你传递一个否定的PGID而不是PID来kill )来杀死它(或者SIGSTOP它)。

我明白为什么你看不到它的唯一原因是分岔的孩子还没有被创造出来,但是父母在死亡方面已经走得足够远了,所以不再被列出来。

不幸的是,我不认为有可能在没有猜测的情况下杀死这种过程。 要做到这一点,需要提前知道下一个PID。 你可以猜测下一个PID,但不能确定没有其他的PID分配。