Перезапустите процесс в Linux по номеру pidn с помощью команды kill, как?

21278
Rubén Marrero

Ну, я хочу иметь возможность перезапускать процессы в Linux, и поэтому я изучил killman-страницы для этого. Очевидно 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), а затем SIGCONTсигнал (номер 18) следующим образом:

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с почти такими же результатами я что-то упустил? Кто-нибудь знает, что мне нужно, чтобы достичь того, что я хочу?

3

2 ответа на вопрос

5
grawity

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.

Как мне это записать? (если я использую cp, он выдает ошибку) и что делает SIGHUP? Rubén Marrero 9 лет назад 1
Хорошо, rsync достаточно для записи этого, но как мне его восстановить? Rubén Marrero 9 лет назад 0
SIGHUP - это сокращение от Hang Up ... Как телефонный разговор. Обычно он используется в такой ситуации, когда работающая программа готова принять такой сигнал и перезапустить, когда она получает HUP. Это действительно не перезапускает либо. В большинстве случаев он просто сбрасывает свое внутреннее состояние, не останавливаясь. Таким образом, невозможно перезапустить программу, если она не написана для ответа на эти сигналы. jcoppens 9 лет назад 2
@jcoppens Если у меня есть точная копия некоторого / proc / [pid], могу ли я воссоздать его, обернув в exec () или что-то еще? Rubén Marrero 9 лет назад 0
Я подозреваю, что в / proc / pid есть некоторые параметры, которые могут вызывать тревоги. Но я не эксперт в этой части. jcoppens 9 лет назад 0
0
user5723841

Есть сигнал «RELOAD».

Предположим, что у вас есть squidпроцесс с pid 1, запускаемый в контейнере, если вы перезапустите процесс squid, то контейнер выйдет. но вы можете «ЗАГРУЗИТЬ» это так:

kill -HUP 1 
как вы перезапустите его? Rubén Marrero 6 лет назад 0
Вы не можете перезапустить процесс с выполнением pid 1 в контейнере, потому что операция `restart` это просто` stop`, а затем `start`, контейнер сразу же выйдет, когда обнаружит, что pid 1 был убит, поэтому` start никогда не случится. `kill -HUP 1` перезагрузит конфигурацию без уничтожения процесса, что равно` restart`. user5723841 6 лет назад 0

Похожие вопросы