我有 pid 我想重新启动,这个过程从 main 开始,得到一个新的 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
如果要将任务置于后台,请将最后一行替换为。