如何获取通过setsid执行的进程的ID

时间:2013-04-30 12:20:37

标签: bash

我打算通过webapp控制一些程序(如媒体播放器和shell), 由于网页每次用户访问时都会死亡,我决定使用setsid打开程序,然后webapp将通过管道与之通信。

注意:由于nohup之类的内容会自动停止,我无法使用nohup bash -i <fifoin >fifoout 2>&1 &

使用setsid一切都很完美,但我无法杀死进程,因为我不知道分叉进程的ID! ..那么,我该如何检索setsid ed过程的ID?

我试过像

这样的东西
setsid bash -i <fifoin >fifoout 2>&1
kill $!
kill $$

结果,两个kill都不起作用,我不会使用ps -e搜索ID,因为我无法杀死所有正在运行的bash -i shell!

2 个答案:

答案 0 :(得分:2)

只有一些使用strace的错综复杂的方法出现在我的脑海中。

如果您无法重定向标准错误:

read _ _ sid < <(2>&1 strace -esetsid setsid bash -i <fifoin >fifoout)
echo $sid

如果您需要重定向标准错误:

strace -o/tmp/filename -esetsid setsid bash -i <fifoin >fifoout 2>&1 &
sleep 1 # Hope 1 s is long enough
read _ _ sid </tmp/filename
echo $sid

答案 1 :(得分:0)

您仍然需要使用&来处理该过程,否则它将在前台运行,阻止以下行甚至尝试执行。

setsid bash -i <fifoin >fifoout 2>&1 &
kill $!