나는 PID를 가지고 있고 다시 시작하고 싶습니다. 프로세스는 메인에서 시작되어 새로운 PID를 얻습니다.
pid
바이너리 경로를 사용하지 않고 바이너리 경로만 사용하여 exec
이 작업을 어떻게 수행할 수 있습니까?
답변1
명시된 바와 같이여기, 재시작 신호가 없습니다. 해당 과정을 다시 수행해야 합니다. 이것이 흔한 일이라면 이 프로그램을 서비스에 넣거나 간단한 루프 스크립트에 넣어 이 문제를 보다 유기적으로 처리할 수 있도록 해야 합니다.
하지만 또 다른 불안정한 bash 파이프라인을 원한다면 여기 있습니다. 이렇게 하면 보안 컨텍스트 없이 실행 사용자로 프로그램이 다시 시작됩니다(따라서 신뢰하지 않는 항목에서는 이 메서드를 호출하지 마세요!).
restart_pid() {
# First we need to find the program's arguments
SAVED_COMMAND="$(while IFS= read -r -d $'\0' f; do printf '%q ' "$f"; done < /proc/$1/cmdline)"
# Then we need to cd into its directory so that we stay as true to the intial conditions as possible
cd /proc/$1/cwd
# Now kill the process
kill $1
# Now we can restart the process
eval $SAVED_COMMAND
}
이 명령을 실행한 후 신호를 보낼 권한이 있는 restart_pid <pid>
모든 개체를 호출할 수 있습니다 .<pid>
eval $SAVED_COMMAND & disown
작업을 백그라운드에 두려면 마지막 줄을 .