Restart process on linux by its pidn number with kill command, how?

74,039

Solution 1

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.

Solution 2

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
Share:
74,039

Related videos on Youtube

Rubén Marrero
Author by

Rubén Marrero

Updated on September 18, 2022

Comments

  • Rubén Marrero
    Rubén Marrero over 1 year

    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?

  • Rubén Marrero
    Rubén Marrero about 9 years
    How do i record that? (if i use cp it throws an error) and what does SIGHUP?
  • Rubén Marrero
    Rubén Marrero about 9 years
    Ok, rsync is enough to record that, but how do I restore it?
  • Rubén Marrero
    Rubén Marrero about 9 years
    @jcoppens If i have the exact copy of some /proc/[pid] can I recreate it by wrapping it into exec() or something?
  • jcoppens
    jcoppens about 9 years
    I suspect that there are some parameters in the /proc/pid, which might raise alarms. But I'm not an expert on that part.
  • Rubén Marrero
    Rubén Marrero over 5 years
    how do you restart it?
  • user5723841
    user5723841 over 5 years
    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.