为什么我不能在Linux上使用带有execvp()的子进程的新名称使用killall?

时间:2010-03-05 13:10:57

标签: c linux process

假设我有一个名为'exe'的可执行文件,它可以生成子进程。这个子进程需要成为守护进程,我们需要更改其名称。接下来我想使用killall使用新名称向此进程发送信号,但我需要使用旧名称。

事件的顺序如下:

  1. 启动'exec'
  2. fork - >如果父母退出
  3. detach(chdir,setsid,umask)
  4. execvp('exec','daemon',...)
  5. 在4上,argv [0]设置为'守护进程'。

    在此之后,我可以做一个'ps'和'top',我整齐地看到这些命令的输出中出现名称'daemon'。但是,当我尝试使用killall杀死进程(向其发送信号)时,我必须提供名称'exec'而不是'守护进程'。

    似乎内核并不完全了解新名称。

    我之所以需要此功能,是因为我想使用相同的可执行文件生成一些具有不同职责的子进程。我还希望能够通过名称引用它们来单独停止和启动它们。我不想将新名称符号链接到常见的exec可执行文件(就像busybox一样)。

    有解决方法吗?

    我正在使用Linux Ubuntu 9.10。

    干杯, 约翰

2 个答案:

答案 0 :(得分:2)

某些工具使用二进制名称,其他工具使用进程名称(您作为execvp第一个参数传递的内容)。尝试应对它:)

答案 1 :(得分:2)

尝试使用pkill代替killall