我有一个奇怪的问题,我无法完全理解。我所做的是运行一个名为 fn_rundumper 的函数,它基本上只是调用 bash 代码:
pterm -z "cmd.sh" param1 &
这是它的输出,其中包括背景 pid “27938858”:
fn_rundumper
running fn_dumper...
[1] 27938858
fn_dumper...done
然后我查看正在运行的作业编号,它还显示 PID“27938858”:
jobs -l
[1] + 27938858 Running $(pterm -z "$SCRIPTS_DIR/run_dumper.sh" $VO
然后我执行一个ps
命令来查看pterms
正在运行的内容:
ps | grep pterm
24285189 ? 00:00:00 pterm
27938859 ? 00:00:00 pterm
这产生了 PID 27938859
。这和其他人不一样!
当我杀死 PID 时,27938858
似乎什么都没有发生。当我杀死 PID 时27938859
,后台pterm
关闭。
问题是我可能想要运行许多不同的后台 pterm 以及一些未作为后台任务打开的 pterm(即单独运行)。因此,当我整理时,我只想关闭通过脚本打开的 pterms。
我试图用来jobs -l
查看我需要关闭的 PID,但正如我刚刚描述的那样,这是错误的 PID。
谁能解释为什么会这样?以及我需要做什么才能获得正确的 PID?谢谢!
- 编辑1 -
我能想到的最好的办法是做一个ps | grep pterm
前后比较结果以找到新的 pterm PID...可行,但丑陋:(
- 编辑2 -
我在命令行上再次测试了这个(没有函数调用):
首先我做了:
`pterm -z "$VOE_SCRIPTS_DIR/run_dumper.sh" $PROJECT_DIR` &
然后查看ps / $!
结果并得到相同的行为。
然后我做了:
pterm -z "$VOE_SCRIPTS_DIR/run_dumper.sh" $VOE_PROJECT_DIR &
即删除了反引号,现在 PID 都匹配了!我想我可以从我的代码中删除反引号,但我真的不明白那是什么意思!