获取将输出传输到另一个命令的命令的进程ID(PID)

3
为了远程启动一个程序、记录其输出并立即查看该日志,我正在使用这个脚本:
nohup mycommand 2>&1 | tee -a server.log &

现在,我想将新启动的名为“mycommand”的进程的pid存储到文件中(由于名称非常通用,因此不能仅使用pgrep,否则可能会发生冲突)。
如果我只是添加“echo $!> mycommand.pid”,则会得到“tee”的pid。
如何可靠地将“mycommand”的pid写入文件?
顺便问一下,为什么这样不会给出正确的pid?
( nohup mycommand 2>&1 ; echo $! > mycommand.pid ) | tee -a server.log &

可能是重复问题:https://dev59.com/FHA75IYBdhLWcg3wVnmI - anubhava
1个回答

1

好的,这个简单的变量可以工作:

( nohup mycommand 2>&1 & echo $! > mycommand.pid ) | tee -a server.log &

我不确定为什么 ; 无法工作,而我必须使用 & 来替代它。

我只是接受了我的答案,因为已经过去3个月了。但如果有人写了一个更好的答案,并且有充分的解释,我很乐意接受它。 - Denys Séguret
我认为;无法正常工作的原因是它表示等待第一个命令完成 - 此时pid已经不存在了。 - artfulrobot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接