Başka bir işlemin iş parçacıklarını gözlemlemek için ptrace içeren bir linux uygulaması üzerinde çalışıyorum. Gözlemlediğim uygulama çocuk süreçlerini çatalladığında, bu zaten çok iyi çalışıyor. Tüm çocukların ben kurulumunu takip etmek içinptrace ve dişler
SIGSTOP
formu alt süreçSIGTRAP
ebeveyn
den: my uygulamada waitpid'nin arayarak ben gözlemleyerek uygulamada aşağıdaki sinyalleri elde edebilirsiniz PTRACE_O_TRACEFORK
, PTRACE_O_TRACEVFORK
, PTRACE_O_TRACECLONE
ve PTRACE_O_TRACEEXIT
ile ptrace.
Her şey çocuk süreçlerinde oldukça iyi çalışıyor olsa da, uygulamanın iş parçacıklarını gözlemleyemiyorum. İş parçacığı oluşturma işleminden SIGTRAP
aldım ancak iş parçacığından herhangi bir sinyal alamıyorum.
ptrace
ile ilgili özel bir şey var mı? strace
, iş parçacığını nasıl izler (strace
kodundaki iş parçacıklarına özel herhangi bir özel yordam bulamadım)? Sonra ptrace(PTRACE_ATTACH, pid, NULL, NULL);
waitpid()
çağırır: Bir işlemi eklemek
- Birinci:
trace_pid = waitpid(-1, &status, 0);
- Set
ptrace
seçenekleri:ptrace(PTRACE_SETOPTIONS, pid, NULL, PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE | PTRACE_O_TRACEEXIT);
Bu benim uygulamada ptrace
nasıl kullanılacağı
Pid'e iliştirdikten sonra bir döngüde waitpid()
numaralı telefonu arıyorum ve'u arayın. ptrace
tarafından bildirilen her yeni görev için. Tabii ki, olay işleme sonrası SIGCONT
ile görevlerine devam ediyorum.
arayarak tüm parçacıkları gelen sinyalleri var Sorunun özü: Yeni bir iplik oluşturulduğunda, gözlem sürecindeki sigstop'u bile alamıyorum. Ancak, ptrace documentatio'da şöyle diyor: "otomatik olarak SIGSTOP ile başlayacak yeni klonlanmış süreci izlemeye başlıyor." Bu nasıl olabilir? – mupro
Procfs ve posix konuları kullanarak küçük bir uygulama kullanarak biraz daha araştırma yaptım. Tüm uygulama, yeni bir iş parçacığı başlatmak ve bir süre uyumaktır. Yeni iş parçacığı da birkaç saniye uyuyor. Dediğim gibi, yeni iş parçacığı için waitpid ile bir sigstop almamıştım. Yeni evre için procfs durum dosyası beni anlatıyor Ancak: Adı: thread_test Devlet: t (aydınger durdur) Tgid: 2538 Pid: 2545 ppid: 2395 TracerPid: 2540 Yani yeni iplik durdu ama waitpid stop sinyalini alamaz. Konu izlemenin doğru yolu nedir? – mupro