16

Well, I want to be able to restart processes on linux and so I looked into kill manpages for that. Apparently kill -l would list all the signals I could send to a process to do what I need, which are:

 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

I thought that I would get the desired effect by using SIGSTOP signal (number 19) and then SIGCONT signal (number 18) like this:

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.

I also tried with signal number 1 : SIGHUP with pretty much the same results, am I missing something? Does anyone know what I need to reach what I want?

Ruben Marrero
  • 395
  • 1
  • 3
  • 12

2 Answers2

13

There is no “restart” signal. You need to record the environment (environ, cwd, cmdline, security context…) from /proc/<pid> and manually start the process again.

SIGHUP is close, but it is only used by convention to ask the program to reload its settings.

u1686_grawity
  • 426,297
  • 64
  • 894
  • 966
  • 1
    How do i record that? (if i use cp it throws an error) and what does SIGHUP? – Ruben Marrero Apr 29 '15 at 20:59
  • Ok, rsync is enough to record that, but how do I restore it? – Ruben Marrero Apr 29 '15 at 21:36
  • 2
    SIGHUP is the 'abbreviation' of Hang Up... Like a telephone conversation. It is typically used in such situation where the running program is prepared to receive such a signal and restart when it receives the HUP. It doesn't really restart either. In most cases it just resets its internal state, without really stopping. So, there is no way to restart a program unless the program is written to respond to those signals. – jcoppens Apr 30 '15 at 00:36
  • @jcoppens If i have the exact copy of some /proc/[pid] can I recreate it by wrapping it into exec() or something? – Ruben Marrero Apr 30 '15 at 03:20
  • I suspect that there are some parameters in the /proc/pid, which might raise alarms. But I'm not an expert on that part. – jcoppens Apr 30 '15 at 03:32
7

There is a "RELOAD" signal.

Assume you have a squid process with pid 1 runs in container, if you restart the squid process the container will exit. but you can "RELOAD" it like this:

kill -HUP 1
user5723841
  • 223
  • 2
  • 5
  • how do you restart it? – Ruben Marrero Oct 04 '18 at 15:41
  • 1
    You can't restart a process with a pid 1 runs in container, cause the `restart` operation is just `stop` and then `start`, the container would exit immediately when it detect the pid 1 were killed , so the `start` will never happen. `kill -HUP 1` will reload the configuration without kill the process, this equal to `restart` it. – user5723841 Oct 09 '18 at 02:55
  • The generic command `kill -HUP ` may more understandable – dubis Jul 13 '23 at 08:51