Mulai ulang proses di linux dengan nomor pidn-nya dengan perintah kill, bagaimana?

5

Yah, saya ingin dapat memulai kembali proses di linux dan jadi saya melihat ke killhalaman manual untuk itu. Tampaknya kill -lakan mendaftar semua sinyal yang dapat saya kirim ke proses untuk melakukan apa yang saya butuhkan, yaitu:

 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

Saya pikir saya akan mendapatkan efek yang diinginkan dengan menggunakan SIGSTOPsinyal (nomor 19) dan kemudian SIGCONTsinyal (nomor 18) seperti ini:

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.

Saya juga mencoba dengan sinyal nomor 1: SIGHUPdengan hasil yang hampir sama, apakah saya melewatkan sesuatu? Adakah yang tahu apa yang saya butuhkan untuk mencapai yang saya inginkan?

Rubén Marrero
sumber

Jawaban:

5

Tidak ada sinyal "mulai ulang". Anda perlu merekam lingkungan (environment, cwd, cmdline, konteks keamanan ...) dari /proc/<pid>dan memulai kembali proses secara manual.

SIGHUP sudah dekat, tetapi hanya digunakan oleh konvensi untuk meminta program memuat ulang pengaturannya.

grawity
sumber
1
Bagaimana cara merekam itu? (jika saya menggunakan cp itu melempar kesalahan) dan apa yang SIGHUP?
Rubén Marrero
Ok, rsync sudah cukup untuk merekam itu, tetapi bagaimana cara mengembalikannya?
Rubén Marrero
2
SIGHUP adalah 'singkatan' dari Hang Up ... Seperti percakapan telepon. Ini biasanya digunakan dalam situasi seperti itu di mana program yang sedang berjalan dipersiapkan untuk menerima sinyal seperti itu dan memulai kembali ketika menerima HUP. Tidak juga benar-benar memulai kembali. Dalam kebanyakan kasus itu hanya me-reset keadaan internalnya, tanpa benar-benar berhenti. Jadi, tidak ada cara untuk memulai kembali program kecuali jika program ditulis untuk merespons sinyal-sinyal tersebut.
jcoppens
@ jcoppens Jika saya memiliki salinan persis dari beberapa / proc / [pid] dapatkah saya membuatnya kembali dengan membungkusnya menjadi exec () atau sesuatu?
Rubén Marrero
Saya menduga bahwa ada beberapa parameter di / proc / pid, yang dapat meningkatkan alarm. Tapi saya bukan ahli dalam hal itu.
jcoppens
0

Ada sinyal "RELOAD".

Asumsikan Anda memiliki squidproses dengan pid 1 berjalan dalam wadah, jika Anda memulai kembali proses cumi wadah akan keluar. tetapi Anda dapat "RELOAD" seperti ini:

kill -HUP 1
pengguna5723841
sumber
bagaimana Anda me-restart itu?
Rubén Marrero
Anda tidak dapat memulai kembali proses dengan pid 1 berjalan dalam wadah, karena restartoperasi hanya stopdan kemudian start, wadah akan segera keluar ketika mendeteksi pid 1 terbunuh, sehingga starttidak akan pernah terjadi. kill -HUP 1akan memuat ulang konfigurasi tanpa mematikan proses, ini sama dengan restartitu.
user5723841