2009-05-19 5 views
10

,Bir işlemin ne olduğunu araştırmak nasıl? Bu proc/PID dizinden/dan kontrol edilebilir biliyorum

ama,

herhangi biri bana yol gösterebilir nasıl bilmiyorum?

+0

Bu, serverfault.com'a ait, (dosya sistemi aracılığıyla bir işlemin izlenmesi isteniyor) düşünüyorum. Ayrıca, size daha iyi yardımcı olmak için bir süreç hakkında izlemek istediğiniz özellikle bize anlatmak gerekir –

+0

Bir php programı izlemek için arıyorum – omg

+0

Monitör hakkında ne olduğunu ... onun bellek tüketimi, onun ağ etkinliği, denir ... –

cevap

5

Bir işlem tarafından yapılan sistem çağrılarını izlemek istiyorsanız, strace numaralı telefonu arayın.

+0

Bir php programını izlemek için arıyorum. Yardım bu mu? – omg

+0

En azından PHP yorumlayıcısının hangi sistemi çağırdığını size söyleyecektir. PHP betiğinin yaptıklarına bağlı olarak yararlı olabilir veya olmayabilir. Aksi halde PHP hata ayıklamalarına bakmak isteyebilirsiniz. –

+0

Bir xmpp robotunu izliyorum – omg

0

strace komutuna güveniyorum. Ancak, yalnızca sistemin hangi süreci çağırdığını söyler. Ancak bu yeterli olabilir ...

Bir çalışma işlemini çalışma zamanında strace'a bağlamak mümkündür.

Açıkçası, gdb da kullanılabilir.

+0

Bir PHP programının ne yaptığını anlatmak için strace'yi nasıl kullanacağınız konusunda bir demo yapabilir misiniz? – omg

0

Ne tür bilgi arıyorsunuz?/Proc/pid altındaki sahte dizinler oldukça açıklayıcı olmalıdır. Aradığın şeye gerçekten bağlı. Genel mem ve cpu kullanımı için, üstteki gibi bir araç muhtemelen yapılandırılmış bir aralık için güncellendiğinden muhtemelen daha iyidir.

+0

Bir xmpp robotunu izliyorum, süreç hala canlıyken kolayca çevrimdışı oluyor, sebebini araştırıyorum. – omg

8

Genellikle strace bu sorunun cevabıdır. En basit yöntem, örneğin doğrudan bir komut kullanarak strace çalıştırmaktır: Bu zaten PHP gibi süreçleri çalıştırmak için çalışmıyor

[email protected]:~$ strace ls 
execve("/bin/ls", ["ls"], [/* 16 vars */]) = 0 
brk(0)         = 0x9fa8000 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f0a000 
access("/etc/ld.so.preload", R_OK)  = -1 ENOENT (No such file or directory) 

. Neyse ki, -p parametresini kullanarak varolan bir sürece strace ekleyebilirsiniz. Örneğin: yanı -f parametre kullanmak gerekebilir diğer işlemler spawn deamon`lar için

[email protected]:~$ strace -p 3761 
Process 3761 attached - interrupt to quit 
select(16, [5 7 8], NULL, [5 7 8], {0, 580000}) = 0 (Timeout) 
alarm(0)        = 62 
rt_sigprocmask(SIG_BLOCK, [ALRM], [], 8) = 0 
rt_sigaction(SIGALRM, {SIG_DFL}, {0x809a270, [], 0}, 8) = 0 
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 

.

Her zaman yararlı strace dışında, ltrace'a bakmak isteyebilirsiniz. ltrace, strace'e benzer, ancak sistem çağrıları yerine kütüphane çağrılarını gösterir. Bir örnek:

[one;~]-6> ltrace ls 
__libc_start_main(0x804e5f0, 1, 0xbfdb7254, 0x8059a10, 0x8059a00 <unfinished ...> 
setlocale(6, "")                     = "LC_CTYPE=en_GB.UTF-8;LC_NUMERIC="... 
bindtextdomain("coreutils", "/usr/share/locale")             = "/usr/share/locale" 
textdomain("coreutils")                   = "coreutils" 
__cxa_atexit(0x8051860, 0, 0, 0xb7f65ff4, 0xbfdb71b8)           = 0 
isatty(1)                      = 1 
getenv("QUOTING_STYLE")                   = NULL 

ayrıca çıkış beklediğinizden fazla ayrıntılı olabilir böylece iç libc'nin adil bir miktar, hem de aramaları göreceksiniz unutmayın.

+0

Ayrıca, izlediğiniz kişinin alt süreçlerini takip edecek olan strace -f'yi öğrendiğimde benim için de çok yardımcı oldu. Son olarak, strace -f'nin solundaki sayılar için '/ proc/' içeriğine bakıldığında ek bilgiler sıklıkla geri alınabilir. – erikbwork