我打算通过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!
答案 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 $!