我打算通过Web应用程序控制某些程序(例如媒体播放器和 shell ),
由于该网页在用户每次访问时都会消失,因此我决定该网络应用将使用setsid
打开该程序,然后该网络应用将通过管道与其进行通信。
注意:我无法使用nohup
,因为nohup bash -i <fifoin >fifoout 2>&1 &
之类的东西会自动停止。
使用setsid
,一切都可以完美运行,但是由于我不知道 fork 进程的ID,所以我无法终止该进程! ..So,如何获取setsid
ed进程的ID?
我尝试了类似的东西
setsid bash -i <fifoin >fifoout 2>&1
kill $!
kill $$
结果,两个
kill
都不起作用,我不会用ps -e
搜索ID,因为我无法杀死所有正在运行的bash -i
shell! 最佳答案
我只想到使用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
关于bash - 如何获取通过setsid执行的进程的ID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16299784/