通过pid重启进程?

通过pid重启进程?

我有 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如果要将任务置于后台,请将最后一行替换为。

相关内容