Reinicie o processo no Linux por seu número pidn com o comando kill, como?

5

Bem, eu quero poder reiniciar processos no Linux e, por isso, procurei nas killpáginas de manual. Aparentemente kill -l, listaria todos os sinais que eu poderia enviar para um processo para fazer o que eu precisava, que são:

 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

Eu pensei que obteria o efeito desejado usando o SIGSTOPsinal (número 19) e depois o SIGCONTsinal (número 18) assim:

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.

Eu também tentei com o sinal número 1: SIGHUPcom praticamente os mesmos resultados, estou perdendo alguma coisa? Alguém sabe o que eu preciso para alcançar o que eu quero?

Rubén Marrero
fonte

Respostas:

5

Não há sinal de "reinício". Você precisa registrar o ambiente (environment, cwd, cmdline, contexto de segurança ...) /proc/<pid>e iniciar manualmente o processo novamente.

SIGHUP está próximo, mas é usado apenas por convenção para solicitar que o programa recarregue suas configurações.

gravidade
fonte
1
Como eu registro isso? (se eu usar o cp ele gera um erro) e o que o SIGHUP?
Rubén Marrero
Ok, o rsync é suficiente para registrar isso, mas como faço para restaurá-lo?
Rubén Marrero
2
SIGHUP é a 'abreviação' de Desligar ... Como uma conversa telefônica. É normalmente usado em situações em que o programa em execução está preparado para receber esse sinal e reiniciar quando recebe o HUP. Também não é realmente reiniciado. Na maioria dos casos, apenas redefine seu estado interno, sem realmente parar. Portanto, não há como reiniciar um programa, a menos que o programa seja gravado para responder a esses sinais.
Jcoppens
@ jcoppens Se eu tiver a cópia exata de alguns / proc / [pid], posso recriá-la envolvendo-a em exec () ou algo assim?
Rubén Marrero
Eu suspeito que existem alguns parâmetros no / proc / pid, que podem gerar alarmes. Mas não sou especialista nessa parte.
Jcoppens
0

Há um sinal de "RELOAD".

Suponha que você tenha um squidprocesso com o pid 1 executado no container, se você reiniciar o processo squid, o container sairá. mas você pode "RELOAD" assim:

kill -HUP 1
user5723841
fonte
como você o reinicia?
Rubén Marrero
Você não pode reiniciar um processo com um pid 1 executado no contêiner, porque a restartoperação é justa stope start, em seguida , o contêiner sairá imediatamente quando detectar que o pid 1 foi morto, para que startisso nunca aconteça. kill -HUP 1recarregará a configuração sem interromper o processo, isso é igual a restartele.
user5723841