2012-05-14 10 views
5

は私がUnixのバックグラウンド・プロセスは、

[1] +停止

として地位を得た数分後、次のコマンド

nohup perl myPerlSCript.pl >debug_log & 

を使用してバックグラウンドでのperlスクリプトを実行異常停止しました

私はそれを止めることを期待していなかったし、何を止めたのかも分からなかった。これをデバッグして停止理由を調べるにはどうすればよいですか?私は実際にデバッグするunixコマンドを知ることに興味があります。

答えて

1

万が一tcshを使用していますか? Tcshには実際にnohupコマンドが組み込まれています。私はこれまでに多くの問題を抱えていました。

この場合は、/usr/bin/nohupを直接お試しください。

+0

いいえ私はtcshを使用していません。それはbashです。 – user703555

3

バックグラウンドで実行中のプロセスを停止する方法はいくつかあります。それらのすべては、これらの信号のいずれかを伴う:

  • SIGSTOP
  • SIGTSTP
  • SIGTTOU
  • SIGTTIN

SIGSTOPは深刻です。それはブロックされない、無視できない、扱い難い。 SIGKILLがそれを殺すと確信してプロセスを停止します。他のものは、停止を防ぐためにバックグラウンドプロセスによって処理することができます。

  • 信号がkill(2)を用いて他のプロセスによって送信された、またはそれ自体に処理することによってプロセスが端末に書き込みしようとし、端末オプションtostopstty -aの出力を参照して(有効になっているraise(3)又はkill(2)
  • を用いました)。これにより、SIGTTOUが生成されます。
  • プロセスは、tcsetattr(3)またはそれに相当するioctlで端末モードを変更しようとしました。 (これは、sttyで示されるモードと同じです。)tostopフラグの現在の状態に関係なく、SIGTTOUが生成されます。
  • プロセスが端末からの読み取りを試みました。これにより、SIGTTINが生成されます。

このリストはおそらく非常に不完全です。

+0

ありがとうございます - これらの信号のうち、少なくとも[1] +停止 "を引き起こした信号はどれですか? – Rup

+1

これをbashではなくzshで実行すると、より詳細なメッセージが表示されます。 bashはそれらの4つすべてに対して "停止"を表示します。 –

関連する問題