2016-08-05 6 views
0

私はスクリプトから実行するプロセスmyprocessを持っています。このプロセスが正常に実行されたのか、クラッシュしたのかを確認することは可能ですか?実行中のバックグラウンドプロセスが盛り込まれているかどうかを知る方法

これは私がバックグラウンドでプロセスを実行している理由は簡単です

myprocess 12 & 
sleep 12 
# I want to check here if the process crashed 

のように私のスクリプトがどのように見えるかです。私は sleep ingの前に他の仕事をしたい。私が目を覚ました後、プロセスが正常に終了したか、クラッシュしたかどうかを確認したい(コアをダンプした)。

PS:その他の詳細やコードが必要な場合は、以下の点にご注意ください。

+0

どのオペレーティングシステムですか? – pah

+0

linuxを使用しています –

+0

カーネルがコアダンプを許可しているとは限りません。カーネルパラメータ 'fs.suid_dumpable'は、コアダンプを許可/禁止します。ほとんどのRHEL 6.8+派生品では、これは禁止に設定されています。また、コアダンプが置かれている場所を見つける必要があります。デフォルトは 'pwd'にありますが、別の名前パターンでダンプするように設定することができます。これは 'kernel.core_pattern'で設定されます。 – alvits

答えて

3

あなたがあなた$PWDcoreという名前のファイルを持っていないと仮定すると(そうでない場合は削除されます)、これはそれを行うには怠惰方法です:

([このことに注意してください。そのprivilege levels changed or is execute onlyを持っていますfs.suid_dumpablemyprocess場合怠惰コアファイルアプローチのみは]のsysctlの正しいパラメータ化を前提としています。また、kernel.core_pattern設定は、コアファイルがsomewhをダンプする原因となる場合があることに注意します他には$PWDにはありません。適切に設定するには、this articleを参照してください。これらの2つの潜在的な問題を指摘する@alvitsに感謝します。とにかく、私は本当に、次のコアファイルアプローチの使用をお勧めしません。)

#!/bin/bash 

rm -f core 
ulimit -c unlimited 

myprocess 12 & 

# ... Do your stuff ... 

sleep 12 

if [ -f core ]; then 
    echo "This is a minimal example to show that the program dumped core." 
fi 

はまたその間他に何もクリーナー$PWD

にコアをダンプしていない場合にのみ動作することに注意してくださいアプローチ:それを行うには

#!/bin/bash 

(rm -f /tmp/myprocess.success && myprocess 12 && touch /tmp/myprocess.success) & 

# ... Do your stuff ... 

sleep 12 

if [ -f /tmp/myprocess.success ]; then 
    echo "myprocess returned EXIT_SUCCESS. But if it didn't returned before sleep 12 elapsed, this will fail." 
fi 

正しい方法:

#!/bin/bash 

myprocess & 

# Store myprocess PID 
MYPROCESS_PID="$!" 

# ... Do your stuff here .... 

# Wait until myprocess returns 
wait "${MYPROCESS_PID}" 

# Store myprocess exit status (returned by wait) 
$ret="$?" 

if [ "${ret}" -gt 0 ]; then 
    echo "Myprocess didn't exited with EXIT_SUCCESS" 
fi 
+1

最初の解決策は、通常はオフになっているsetuidとコアの位置と名前パターンを決定する 'kernel.core_pattern'を持つアプリケーションの' fs.suid_dumpable'に依存していることに注意してください。 OPと将来の読者は、彼らの環境で動作しない場合、失望するかもしれません。 – alvits

+0

確かに、私はこのような状況で最初のアプローチを使用することをお勧めしませんが、しかし、更新されます。ありがとう。 – pah

+0

とにかく、私が知る限り、fs.suid_dumpableはsetuidバイナリにしか影響しません。これはOPケースだとは思いません。 – pah

関連する問題