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

Ant*_*nin 5 bash

我计划通过 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 $$
Run Code Online (Sandbox Code Playgroud)

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

Arm*_*ali 3

strace我只能想到一些复杂的使用方法。

如果您可以不重定向标准错误:

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

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

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
Run Code Online (Sandbox Code Playgroud)