5

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

注意:我不能使用自动停止nohup之类的东西。nohup bash -i <fifoin >fifoout 2>&1 &

setsid一切正常,但我无法终止进程,因为我不知道分叉进程的 ID !..那么,我怎样才能检索 setsided 进程的 ID?

我尝试了类似的东西

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

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

4

2 回答 2

3

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
于 2013-11-04T12:01:05.137 回答
0

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

setsid bash -i <fifoin >fifoout 2>&1 &
kill $!
于 2013-04-30T12:29:11.040 回答