![PIDでプロセスを再起動しますか? [閉鎖]](https://linux33.com/image/173246/PID%E3%81%A7%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%82%92%E5%86%8D%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
私は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
タスクをバックグラウンドに置くには、最後の行を 。