我想在后台运行我的脚本,然后写它的pid文件。我正在使用nohup来做这件事。
这是我想出来的
nohup ./myprogram.sh > /dev/null 2>&1 & && echo $! > run.pid
但这会导致语法错误。
下面的代码没有给予语法错误,但问题是echo $!因为nohup是在子shell中运行的,所以没有写出正确的pid
(nohup ./myprogram.sh > /dev/null 2>&1 &) && echo $! > run.pid
如果我想要一个单行语句来实现这一点,有什么解决方案吗?
4条答案
按热度按时间cedebl8k1#
在重定向后已经有了一个&符号,它将脚本置于后台。因此,您只需要在与号之后键入所需的命令,而不需要以任何其他内容作为前缀:
sg3maiej2#
这应该可以工作:
jtoj6r0c3#
格里戈尔的回答是正确的,但不完整。直接从nohup命令中获取pid与获取您自己的进程的pid不同。
运行
ps -ef
:要获取自己进程的pid,可以用途:
请注意,如果您尝试在nohup之后立即运行第二个命令,则子进程还不存在。
rqqzpn5f4#
也可以使用Python: