Shn*_*sel 2 process c process-management fork
我一直在搞乱 forkbombs 并注意到如果我只是重复 fork() 进程,杀死初始进程将破坏整个树。对于使用 BASH 使用其后台操作符 & 编写的 forkbombs,情况并非如此,所以我知道有一种方法可以解决这个问题。如何在 C 中实现相同的结果?
我一直在使用维基百科中的 forkbomb 示例:http : //en.wikipedia.org/wiki/Fork_bomb#Example_fork_bombs
如果您在 C 中执行此操作,则需要setsid(2)
在代码中执行 a以及一些fork()
和exit()
调用。 setsid()
有这个效果:
... 如果调用进程不是进程组领导,则创建一个新会话。调用进程是新会话的leader,新进程组的进程组leader,没有控制tty。
这是来自手册页。基本上,如果作为进程组领导的进程获得某些信号,则该进程组中的每个进程 ID 都会收到该信号。您可以在kill(2)
手册页中查看此机制。如果您调用的 PIDkill()
为负,则信号将发送到进程组中的每个进程。
您还需要fork()
和exit()
在正确的地方。基本上看说明如何成为守护进程。你需要做的部分:
switch (fork()) {
case -1: return -1;
case 0: break;
default: _exit(EXIT_SUCCESS);
}
setsid();
switch (fork()) {
case -1: return -1;
case 0: break;
default: _exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)
阅读有关成为守护进程的更多信息,了解此代码背后的原理。
归档时间: |
|
查看次数: |
5338 次 |
最近记录: |