ACIK KAYNAK
 
*
Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun. Aralık 02, 2008, 05:24:20 ÖS


Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz



Reklamlar
Sayfa: [1]   Aşağı git
  Yazdır  
Gönderen Konu: Ders 13. Sinyallere giriş, sigterm ve sigint, nohup,  (Okunma Sayısı 113 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
fazlamesai
Global Moderator
***
Offline Offline

Mesaj Sayısı: 36



Üyelik Bilgileri
« : Ağustos 09, 2007, 01:27:34 ÖS »

Süreçleri öldürmek, durdumak ya da devam ettirmek için, Linux işletim sistemi \sinyal" olarak bilinen • ozel bir iletişim şekli kullanır. Bir sürece belli bir sinyal yollayarak o süreci sonlandırabilir, durdurabilir, ya da başka şeyler yapabilirsiniz. Aslında Control-C, Control-Z, ya da fg, bg gibi komutları kullandığınızda yaptığınız tam da budur { bash kabuğunun belli bir sürece belli bir sinyal göndermesini sağlamaktasınızdır. Bu sinyaller kill komutuna süreç numarası (pid) verilerek de gönderilebilir:

$ kill -s SIGSTOP 4386

$ jobs -l
[1][2]+ 4205 Running 4386 Durduruldu (sinyal) xeyes -center red & xeyes -center blue

Gördüğünüz gibi kill komutu isminin çağrıştırdığı şekilde illa ki bir süreci \öldürmek" zorunda değildir. \-s" seçeneği kullanılarak kill komutunun bir sürece herhangi bir sinyali göndermesi sağlanabilir. Linux süreçlerine SIGINT, SIGSTOP ya da SIGCONT sinyallerinden biri gönderildiğinde sırası ile bunları sonlandırır, durdurur ya da devam ettirir. Bir sürece yollayabileceğiniz başka sinyal türleri de vardır; bunlardan bazıları uygulamanın özelliklerine göre yorumlanacaktır. Belli bir sürecin hangi sinyale karşı nasıl tepki vereceğini öğrenmenin en güzel yolu ilgili süreci başlatan komutun man sayfasına bakıp oradaki SIGNALS bölümünü okumaktır.

SIGTERM ve SIGINT

Eğer bir süreci öldürmek (sonlandırmak) isterseniz pek çok seçeneğiniz vardır. Aksi belirtilmediği sürece kill  komutu SIGTERM sinyalini gönderir ve bu Control-C ile yollanabilen SIGINT sinyalinden farklı olmakla birlikte benzer sonuç üretir:

$ kill 4205

$ jobs -l
   [1][2]+ 4205 Sonlandırıldı 4386 Durduruldu (sinyal) xeyes -center red & xeyes -center blue

Büyük ölüm

Süreçler hem SIGTERM hem de SIGINT sinyallerini dikkate almayıp görmezden gelebilirler; bunu ya bilerek ve isteyerek yaparlar ya da bir şekilde durmuş veya takılmışlardır. Bu gibi durumlarda bir balyoz kullanmak gerekebilir ve devreye SIGKILL sinyali girer. Bir süreç SIGKILL sinyalini görmezden gelemez:

$ kill 4386

$ jobs -l
   [2]+

$ jobs -l [2]+    4386 Durduruldu (sinyal) $ kill -s SIGKILL 4205
   4205 Süreç durduruldu xeyes -center blue xeyes -center blue

nohup

Belli bir işi (süreci) başlattığınız terminal o işin kontrol terminali olarak adlandırılır. Bazı kabuklar • ontanımlı olarak (bash değil) siz logout komutu ile terminalden çıkınca arkaplandaki işlere SIGHUP sinyalini yollayıp onların sonlanmasına yol açarlar. Eğer siz terminalden logout komutu ile çıktığınızda süreçlerinizin bu şekilde sonlandırılmasını istemiyorsanız o zaman süreci başlatırken nohup seçeneğini kullanmanızda fayda vardır:

$ nohup make &

$ exit

ps komutu ile süreçleri listelemek

Yukarıda kullandığımız jobs komutu içinde bulunduğumuz mevcut bash oturumunda başlatılan süreçleri listeliyordu. Sisteminizdeki tüm süreçleri görmek için kullanmanız gereken komut ise ps komutudur ve bu komuta a ve x seçeneklerini vermeniz gereklidir.

$ ps ax
TTY
   1 ? 2 ? 3 ? 4 ? 5 ? 6 ?    STAT   TIME COMMAND S SW SWN SW SW SW 0:04 init 0:00 [keventd]

0:00 [ksoftirqdçPU0] 0:01 [kswapd]

0:00 [bdflush] 0:00 [kupdated]

Bu komutun çıktşı olan listenin ancak küçük bir kşmını yukarı yazdık çünkü genellikle bu liste çok daha uzun olur. Bu liste size makinanın o anda ne yaptığının bir fotoğrafını verir ancak göz atılacak pek ı cok veri vardır içinde. Eğer ax seçeneklerini kullanmadan ps komutunu çalıştıracak olsaydınız sadece size ait ve belli bir terminalin kontrolü altındaki süreçleri görürdünüz. ps x size tüm süreçleri gösterir, belli bir terminal tarafından kontrol edilmeyenler dahil. Eğer ps a şeklinde kullanmış olsaydınız o zaman da belli terminallere bağlı ve herkese ait süreçleri görürdünüz.

Hem ormanı hem de ağaçları görebilmek

Her süreç ile ilgili farklı bilgileri de listeleyebilirsiniz. {forest (orman) seçeneği süreç hiyerarşisini görmenizi ve sisteminizdeki birçok sürecin arasındaki ilişkiyi algılamanızı sağlar. Bir süreç başka bir süreç başlattığında bu yeni sürece \çocuk" (child) süreç denir. {forest seçeneği kullanılarak elde edilen bir pŞ Çktşında ebeveyn süreçler yani çocuk süreçleri başlatan süreçler solda görünürken çocuk süreçler de sağa doğru dallanacak şekilde listelenirler.

$ ps x --forest
   PID TTY 318 ? 444 ?
2932 ?
   495 ? 493 ? 462 ?    S S S S S S STAT   TIME COMMAND

0:00 /bin/sh /etc/X11/xinit/xinitrc
   0:00

\kwrapper ksmserver --restore 0:00 kdeinit: kioıuiserver 0:00 /usr/bin/kdesud 0:00 kdeinit: kcookiejar 0:10 kdeinit: kicker

\u" ve \l" ps seçenekleri

\u" ve \l" seçenekleri a ve x seçeneklerine eklenebilen seçeneklerdir ve süreçler hakkında daha çok bilgi
almanızı sağlarlar:

$ ps au

USER

PID %CPU %MEM   VSZ  RSS TTY

STAT START   TIME COMMAND

root
237
0.0
0.4
31961168 tty1
S
10:21
0:00 /bin/bash -login
root
238
0.0
0.4
31961168 tty2
S
10:21
0:00 /bin/bash -login
root
239
0.0
0.4
31961168 tty3
S
10:21
0:00 /bin/bash -login
root
240
0.0
0.4
31961168 tty4
S
10:21
0:00 /bin/bash -login
root
3606
0.0
0.5
31281440 ttyp1
S
11:10
0:00 /bin/bash
knoppix
5054
0.5
0.8
31282096 ttyp0
S
11:30
0:00 /bin/bash
knoppix
5195
0.0
0.5
35081532 ttyp0
R
11:32
0:00 ps au

\top" kullanımı

Eğer kendinizi sürekli ps komutunu çalıştırır ve neler olup bittiğini anlamaya çalışır durumda bulursanız ihtiyaçnız olan esas komut top komutudur. top komutu sürekli güncellenen bir süreç listesi basmanın yanı sıra özet bilgi vermeyi de ihmal etmez:

$ top

11:34:16 up
1:13,

0 users,  load average: 0.43, 0.21, 0.12

47 processes: 45 sleeping, 2 running, 0 zombie, 0 stopped

CPU states:

3.0% user,

1.8% system,

0.0% nice,

95.2% idle
Mem:
255680K total,

249136K used,

6544K free,

10624K buffers
Swap:
393552K total,

43852K used,

349700K free,

37780K cached
PID USER

PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND

309 root
14
0
204M 132M

6644 S
2.552.9

2:23 XFree86
5050 knoppix
11

011316
10M
9356 R
0.7
4.2
0:01 kdeinit
3849 knoppix
10

038532
36M 13612 S

0.514.7

0:45 kword
5282 knoppix
13
0
10161016

808 R
0.5
0.3
0:00 top
1 root
8
0
52
48
28 S
0.0
0.0
0:04 init
2 root
9
0
0
0
0 SW
0.0
0.0
0:00 keventd
3 root
19
19
0
0
0 SWN
0.0
0.0
0:00 ksoftirqdçPU0
4 root
9
0
0
0
0 SW
0.0
0.0
0:01 kswapd
5 root
9
0
0
0
0 SW
0.0
0.0
0:00 bdflush
Logged

Linux Linux'tur. Windows Hiç Birşey!!!
Sayfa: [1]   Yukarı git
  Yazdır  
 
Gitmek istediğiniz yer:  


[Basit Gorunum]

MySQL ile Güçlendirildi PHP ile Güçlendirildi Powered by SMF 1.1.6 | SMF © 2006, Simple Machines LLC

acikkaynak
XHTML 1.0 Geçerli! CSS Geçerli! Dilber MC Theme by HarzeM