多くのプログラマーが満足しているようです。PIDをファイルに保存その後、同じプロセスであるかのようにPIDを読み取り、使用します。一般的な考えは、これらの可能性が十分に無視できると思われます。この問題をどのように簡単に説明できますか?理想的には、既存のシェルスクリプトを使用して試行錯誤を最小限に抑えながらこれを実証することができます。
山の例:
foo &
pid=$!
echo $pid > pidfile
do
kill $!
sleep 1 &
until [ $pid -eq $! ]
kill "$(cat pidfile)" # Kills `sleep`, not `foo`!
ベストアンサー1
exec
PIDの再利用の良い例は、次のものを使用することです。
#!/bin/bash
cat > foo << 'EOF'
echo "Inside foo."
sleep 5
exec ./bar
EOF
cat > bar << 'EOF'
#!/bin/bash
echo "Inside bar."
sleep 5
EOF
chmod a+x foo bar
./foo &
while sleep 3; do
[[ -f "/proc/$!/cmdline" ]] || break
printf 'pid %d == %s\n' "$!" "$(tr '\0' ' ' < "/proc/$!/cmdline")"
done
rm foo bar
このスクリプトを実行すると、次のような結果が生成されます。
$ ./script
Inside foo.
pid 4953 == /bin/bash ./script
Inside bar.
pid 4953 == /bin/bash /tmp/tmp.AvDLtMWYPy/bar
pid 4953 == /bin/bash /tmp/tmp.AvDLtMWYPy/bar
必要に応じてプログラムできるので、exec
そのPIDのプロセスが同じか類似しているという保証はありません。