簡體   English   中英

如何運行nohup並在單個bash語句中編寫其pid文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM