많은 프로그래머들이 만족하고 있는 것 같습니다.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의 프로세스가 동일하거나 유사하다는 보장은 전혀 없습니다.