私はbashをかなりよく知っているので、この質問が解決しやすい場合はお詫び申し上げます。詳細が必要な場合はお知らせください。以下のスクリプトは、Pythonワークフローを起動し、ワークフローの終了時にresults.jsonファイルが更新されるのを待つ大きなスクリプトの一部です。
使ってみました。
{
sleep 1m
kill $$
}&
ただし、results.jsonファイルが1分以内に更新されると、エラーが生成されます。
Kill:(90015) - そのプロセスはありません。
スクリプトは次のとおりです。
#! /bin/bash
export DISPLAY=:0.0
export outputfile=results.json
if [[ ! -e $outputfile ]]; then
touch $outputfile
fi
OldTimestamp=$(date -r $outputfile)
{
sleep 1m
kill $$
}&
NewTimestamp=$OldTimestamp;
while [ "$NewTimestamp" = "$OldTimestamp" ]; do
sleep 0.1
NewTimestamp="$(date -r $outputfile)"
done
ベストアンサー1
ただ取り除きたいならKill:(90015) - そのプロセスはありません。エラー、プロセスを終了する前に、プロセスがまだ実行中であることを確認できます。
{
sleep 1m
ps -p $$ > /dev/null && kill $$
}&
しかし、実際に私はkillをまったく使用しません。 whileループの相互作用の数を追跡し、適切な反復数の後にループを中断することができます。
NewTimestamp=$OldTimestamp;
iterations=0
while [ "$NewTimestamp" = "$OldTimestamp" ] && [ $iterations -lt 600 ]; do
sleep 0.1
NewTimestamp="$(date -r $outputfile)"
let iterations++
done
ファイルが更新されていない場合、ゼロ以外の終了コードで終了するには、次のように追加します。
if [ "$NewTimestamp" = "$OldTimestamp" ] ; then
echo "results.json was not updated" >&2
exit 1
fi
またはそのようなもの。