我打算通过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/

10-13 01:48