私のスクリプトでは、データセットをinput_aa、input_abなどに分割しました。その後、次のように同じPythonスクリプトで各データセットを実行しました。
# Execute program on each split file
for part in input_*; do
python3 $part &
done
wait
私の質問は2つあります。 Pythonプロセスの失敗をどのように検出しますか?検出されたら、生成されたすべてのサブプロセスを終了し、失敗でスクリプトを終了するにはどうすればよいですか?
ベストアンサー1
プロセスグループを使用できます。
set -m
(
for part in input_*; do
(python3 "$part" || kill 0) &
done
wait
)
set -m
(およびオプションの POSIX シェル機能、必須 Unix シェル機能) 独自のプロセスグループでジョブを実行します。bash
、、、yash
ではサブシェルがアクティブな操作であるため、外部プロセスとその中に作成されたすべてのプロセスzsh
は同じプロセスグループに配置されます。mksh
set -m
(...)
dash
他のシェルベースのケースと同様に、ash
これはトップレベルのシェルプロセスにのみ適用されます。したがって、コードをサブシェルに入れないと、コードは機能します。
ksh
これはAT&Tや以前のSysV/Bourneシェルではまったく機能しません。
kill 0
現在のプロセスグループのすべてのメンバーにSIGTERMシグナルを送信します。