Terminal Emülatörleri SIGKILL'i Aldıktan Sonra Çocuklarını Nasıl Öldürebilir?


12

Anladığım kadarıyla SIGKILL yakalanamıyor. Bu, bir sürecin OS'yi yok etmeden önce çocuklarını öldürmek için zamanı olmadığı anlamına gelir. Bu bir kabuk betiği ile gösterilebilir.

#! /bin/bash

trap : SIGTERM SIGINT SIGKILL # SIGKILL is pointless.

mplayer video.avi

SIGKILL ile öldürmek mplayer'ı çalışır durumda bırakır.

$ kill -9 $pid

Ama bir terminal emülatörü kullanırken (xterm, Terminal, ...) çocuklar onunla birlikte öldürülür. Bu nasıl mümkün olabilir?

$ mplayer

Ve öldürün:

$ kill -9 $terminal_pid

Ve mplayer gemi ile iniyor. Terminal emülatörleri bir şekilde SIGKILL'i yakalıyor mu yoksa burada başka bir güç var mı?

Yanıtlar:


11

Başlayan süreç xtermterminalin kontrolünde oturum lideri olacaktır.

Terminal gittiğinde, bu işlem otomatik olarak bir SIGHUP sinyali alır (bunu bir SIGCONT izler). Bu, çekirdek tarafından CTRL-C tuşlarına bastığınızda işlemlerin SIGINT'i aldığı şekilde gönderilir.

Ek olarak, bir kabuk çıktıktan sonra bazı çocuklarına SIGHUP gönderebilir ( disownbunu devre dışı bırakmak için bazı kabuklara bakın )


1
Oturumlar ve oturum liderleri hakkında bilgi için: unix.stackexchange.com/questions/18166/… .
Kevin Cox

+1 disownolan çok yararlıdır.
matematik

1

Sorunuz kendine cevap veriyor, çünkü bu işlemler terminal öykünücüsünün altında çocuk olarak çalışıyor. Böylece terminal öykünücüsünü öldürürsünüz ve bunu yaparken tüm çocuk süreçlerini öldürürsünüz (çocuklar kontrol eden terminal öykünücüsü ile aynı işlem grubunda çalıştığından).

Örneğin, aşağıdakilere bakın:

csb@darwin[~]$ ps fauwx | grep -A6 "xfce4-terminal" | awk '{ for (i = 2; i <= 9; i++) $i="" ; print $0 }' 
csb         0:32 xfce4-terminal --geometry=271x65 --display :0.0 --role=Terminal-0x1340050-2606-1351620352 --show-menubar --show-borders --hide-toolbars --working-directory /home/csb --tab --working-directory /home/csb
csb         0:00 \_ gnome-pty-helper
csb         0:00 \_ bash
csb         0:00 | 
                  \_ ssh [redacted]
csb         0:00 \_ bash
csb         0:00 \_ ps fauwx
csb         0:00 \_ grep --color=auto -A6 xfce4-terminal
csb         0:00 \_ awk { for (i = 2; i <= 9; i++) $i="" ; print $0 }

Tüm bu işlemler 'xfce4-terminal' süreçleri altında çalışıyor, bu yüzden bu işlemi öldürürsem, süreç grubundaki tüm alt işlemleri otomatik olarak öldürür ... aynı şekilde, örneğin, terminal öykünücü penceresinden çıkma mutlaka SSH bağlantımı öldür.

Kabuklar gibi programlar, genellikle ilgili alt işlemleri bir gruba yerleştirerek yeni işlem grupları oluşturur. Her iş bir süreç grubudur. Çekirdeğin dışında, bir kabuk, bir süreç grubundaki tüm süreçlere bir sinyal gönderen killpg sistem çağrısı ile işin süreç grubuna sinyaller göndererek işi işler.


3
-1: Bir ebeveyni öldürmek çocukların öldürülmesine neden olmaz .
camh

2
Kabuklar gibi programlar, genellikle ilgili alt işlemleri bir gruba yerleştirerek yeni işlem grupları oluşturur. Her iş bir süreç grubudur. Çekirdeğin dışında, bir kabuk, bir süreç grubundaki tüm süreçlere bir sinyal gönderen killpg sistem çağrısı ile işin süreç grubuna sinyaller göndererek işi işler.
Charles Boyd

2
@CharlesBoyd Bu yorum cevabınızın bir parçası olmalıdır.
jordanm

4
@CharlesBoyd: Bunu cevabınıza ekleyin, -1 yerine +1 vereceğim. Yanıtınız şu anda, bir ana süreç öldürüldüğünde alt süreçler öldürülmüş gibi (BTW, oturum tabanlı değil, süreç grup tabanlı) okuyor.
camh

@CharlesBoyd Bunu anlıyorum, ama sorunun amacı bir SIGKILL aldığında "sinyal göndererek [] bir işi nasıl manipüle ettiği". killpgBu noktada sistem çağrısını kullanmasının bir yolu yok .
Kevin Cox

0

İlk olarak, mplayer'ı öldürülen terminalden sağ çıkarak yeniden üretemiyorum xterm.

Ölmesinin nedeni, ebeveyninin ölümünden bir GÖRÜŞ almasıdır.


Bunu asla söylemedim, bir senaryodayken öldüğünü, ancak hayatta kaldığını ve öldürüldüğünü söyledim.
Kevin Cox

Senaryoda hayatta kalmaz, benim için.
tumbleweed
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.