我正在尝试在引号内获取命令的PID(例如some-command-here
)。能够与由{em> some-command-here
产生的进程进行交互:
x-terminal-emulator -e "some-command-here" &> /dev/null
例如,有时apt full-upgrade -y
可能需要用户输入,因此,some-command-here
产生的过程必须保持交互性。
答案 0 :(得分:0)
x-terminal-emulator -e "some-command-here & echo $! >/tmp/pid" &> /dev/null
cat /tmp/pid
...或摆脱&& / dev / null:
x-terminal-emulator -e "some-command-here & echo $!"
答案 1 :(得分:0)
因此,通过更多的测试和研究,似乎可以使用ps ax
,grep
,xargs
和cut
来完成此任务。
ps ax | grep -v "grep" | grep "sh -c" | grep "some-command-here" | xargs | cut -d ' ' -f 1
通过x-terminal-emulator
传递-e
时,它将产生一个新的shell窗口,并在引号中传递命令。为了执行命令,它将新的外壳程序命令sh -c
与引用的命令一起传递给新外壳。因此,sh -c some-command-here
。在上面的PID搜索中使用。
ps ax
列出了当前正在运行的进程。
grep -v "grep"
搜索输出并删除包含grep
的所有进程作为进程,这仅仅是因为当我们启动此查询时,将创建grep
下的进程。
grep "sh -c"
在输出中搜索包含sh -c
的进程。
grep "some-command-here"
在ps ax
的输出中搜索与引号内内容匹配的过程。
xargs
将grep "sh -c some-command-here"
的输出转换为以空格分隔的列表。
cut -d ' ' -f 1
删除空格并获取第一个结果。会返回相关进程的PID。