Sget'im neden ssh bağlantı kaybından sonra ölmedi?


13

Ben sshbenim sunucuya ed ve koştum wget -r -np zzz.aaa/bbb/cccve onu çalışmaya başladı. Sonra (benim evde) benim internet bağlantısı kesintiye var ve ben varsayarak endişeli var wgetolmuştur hup, çünkü ped sshbağlantısı kesildi ve bu nedenle terminali ölmüştü. Ama sonra sshsunucuma hala çalıştığını ve çıktıyı koyup bir wget.logşeyler indirdiğini fark ettim . Birisi bana burada ne olabileceğini açıklayabilir mi?

Bu psbana şunu veriyor:

PID   %CPU %MEM    VSZ    RSS TTY     STAT START   TIME COMMAND
32283  0.6 29.4 179824 147088 ?       S    14:00   1:53 wget -r -np zzz.aaa/bbb/ccc

?Sütunundaki (soru işareti) ne anlama geliyor tty?


Çalışan modern bir sistemde logind, varsayılan davranışı logind, kullanıcı oturumu kapattığında kullanıcıya ait tüm işlemleri öldürmektir (SIGTERM). Yani bu davranış sisteme özgüdür.
Daniel Pryden

@Dan My system is ubuntu 16.04
yukashima huksay

2
Ubuntu 16.04'ün bir systemd / logind sistemi olduğuna inanıyorum, ancak Ubuntu varsayılan logind.conf açıkça ayarlandı KillUserProcesses=no.
Daniel Pryden

Yanıtlar:


21

Programlar (ve komut dosyaları), birkaç sinyal haricinde, çoğu sinyali yok saymayı seçebilir KILL. HUPSinyal yakalandı ve yazılım böylece isterse göz ardı edilebilir.

Bu dan src/main.cait wgetkaynaklardan (sürüm 1.19.2):

/* Hangup signal handler.  When wget receives SIGHUP or SIGUSR1, it
   will proceed operation as usual, trying to write into a log file.
   If that is impossible, the output will be turned off.  */

Sinyal işleyicinin biraz aşağısında kurulur:

  /* Setup the signal handler to redirect output when hangup is
     received.  */
  if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
    signal(SIGHUP, redirect_output_signal);

Yani benziyor wgetdeğil görmezdenHUP sinyali, ancak günlük dosyasına yönlendirilir onun çıkışı ile işlemeye devam seçer.


Yorum olarak Talep: anlamı ?içinde TTYçıktı sütun ps, söz konusu olmasıdır wgetişlemi artık bir uç / TTY ile ilişkili değildir. SSH bağlantısı kesildiğinde TTY gitti.


1
Ben de anlamını eklemek yararlı olacağını düşünüyorum? tty.
yukashima huksay

Evet, bunu zor yoldan öğrendim. Ssh düştüğünde tüm süreçler ölmez. Nedenini tam olarak bilmek güzel.
Doug

2
Alternatif olarak, ekranı kullanmayı alışkanlık haline getirin ve HUP'ları hiçbir şey yapmayın.
Harper - Monica

8

Basit : wgetiptal edilmez SIGHUP. Yine de öyle SIGTERMve yapıyor SIGINT.

manSayfada hiçbir şey yok, ancak SIGHUPbir wgetsürece gönderirseniz bunu terminalde alırsınız:

# in a different terminal while wget is running (with PID 12345)
kill -HUP 12345
# in the wget terminal
SIGHUP received.
Redirecting output to 'wget-log'.

1
Teşekkürler. Bir kişinin bir sürece kill -HUP pidnasıl gönderebileceğini göstermek için komutu da eklemeniz daha iyi olur SIGHUP.
yukashima huksay
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.