好吧,我希望能够在 Linux 上重新启动进程,所以我查阅了kill
手册页。显然kill -l
会列出我可以发送给进程以执行我需要的操作的所有信号,它们是:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
SIGSTOP
我认为,通过使用信号(编号 19),然后使用信号(编号 18) ,可以得到所需的效果,SIGCONT
如下所示:
kill -19 $PID_NUMBER # It stops! nice, we are reaching just what we wanted.
kill -18 $PID_NUMBER # Ok... it continues to death... that isn't funny though.
我也尝试了信号 1:SIGHUP
结果几乎相同,我是不是漏掉了什么?有人知道我需要什么才能达到我想要的效果吗?
答案1
没有“重启”信号。您需要记录环境(environ、cwd、cmdline、安全上下文……)/proc/<pid>
并手动再次启动该过程。
SIGHUP 很接近,但它只用于按照惯例要求程序重新加载其设置。
答案2
有一个“RELOAD”信号。
假设你有一个squid
pid 为 1 的进程在容器中运行,如果你重新启动 squid 进程,容器将退出。但你可以像这样“重新加载”它:
kill -HUP 1