[英]How to run nohup and write its pid file in a single bash statement
我想在后台運行我的腳本,然后編寫它的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
任何解決方案,鑒於我想要一個單行聲明來實現這一目標?
重定向后,您已經有一個&符號,它將您的腳本放在后台。 因此,您只需要在該&符號后鍵入所需的命令,而不是以其他任何方式作為前綴:
nohup ./myprogram.sh > /dev/null 2>&1 & echo $! > run.pid
這應該工作:
nohup ./myprogram.sh > /dev/null 2>&1 &
echo $! > run.pid
格里戈爾的答案是正確的,但並不完整。 直接從nohup命令獲取pid與獲取自己進程的pid不同。
運行ps -ef
:
root 31885 27974 0 12:36 pts/2 00:00:00 sudo nohup ./myprogram.sh
root 31886 31885 25 12:36 pts/2 00:01:39 /path/to/myprogram.sh
要獲得自己進程的pid,您可以使用:
nohup ./myprogram.sh > /dev/null 2>&1 & echo $! > run.pid
# allow for a moment to pass
cat run.pid | pgrep -P $!
請注意,如果您嘗試在nohup之后立即運行第二個命令,則子進程尚不存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.