【发布时间】:2012-12-01 00:28:49
【问题描述】:
我知道我可以使用技巧if (fork()) exit(0); 来更改当前进程的 pid。因此,以下程序的 pid 变化非常快。如何杀死这样的进程?有没有比执行大量killall procname 直到能够在它分叉之前运行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 几次,直到显示一些输出。为什么不总是列出进程?
【问题讨论】:
-
谁会投票结束这个“离题”?我的意思是,说真的,这与编程无关?你们这些人有什么问题让你们如此亲密?是的。
-
这样写程序有什么实际理由吗?它看起来更像是恶意软件,而不是任何有用的东西。
-
我还没有(还)否决,但是编程问题究竟是什么是?您似乎只是在寻求一种从命令行查找和终止进程的简单方法。
-
我正在寻找的是了解如何在 linux 环境下杀死这样的进程。我不想真正杀死它,只是了解这个过程。不是一个“简单的方法”命令行。
-
@EdS.:我认为这更像是一个系统管理问题而不是一个编程问题,但由于它涉及到 POSIX 进程和进程组语义的复杂性,我也认为它在这里是相关的,所以我还没有投票结束。