2012-05-14 103 views
5

我使用下面的命令Unix的後臺進程異常停止

nohup perl myPerlSCript.pl >debug_log & 

幾分鐘後執行在背景上的perl腳本我得到的狀態作爲

[1] +停止

我沒想到會停下來,也不知道是什麼阻止了它。我怎樣才能調試這個並找出它爲什麼停止?我實際上很想知道要調試的unix命令。

回答

1

你是否在使用tcsh? Tcsh實際上帶有一個內置的nohup命令,我以前遇到過很多問題,看到了您所看到的確切行爲。

如果是這種情況,請直接嘗試使用/usr/bin/nohup

+0

不,我不使用tcsh。這是bash。 – user703555

3

有幾種方法可以停止在後臺運行的進程。所有這些都涉及這些信號之一:

  • SIGSTOP
  • SIGTSTP
  • SIGTTOU
  • SIGTTIN

SIGSTOP嚴重。它不可阻擋,不可取消,難以處理。它會像SIGKILL一樣會終止進程。其他人可以通過後臺進程處理以防止停止。

  • 被另一個進程使用kill(2)使用raise(3)kill(2)
  • 由過程本身的方法,試圖寫入到終端,並且終端選項tostop使能(見的stty -a輸出的信號被髮送,或)。這會生成SIGTTOU
  • 該過程試圖用tcsetattr(3)或等效的ioctl更改終端模式。 (這些模式與stty所示的模式相同。)無論tostop標誌的當前狀態如何,都會生成SIGTTOU
  • 該進程試圖從終端讀取。這會生成SIGTTIN

該列表可能非常不完整。

+0

謝謝 - 是否有可能看到哪些信號至少導致了[[1] + Stopped]? – Rup

+1

在zsh而不是bash中運行它,它會給你一個更詳細的消息。 bash爲所有4個打印「停止」。 –