$ ps -e -T | grep myp | grep -v grep
797 797 ? 00:00:00 myp
797 798 ? 00:00:00 myp
797 799 ? 00:00:00 myp
797 800 ? 00:00:00 myp
Ini menunjukkan proses myp
dengan PID = 797 dan empat utas dengan SPID yang berbeda.
Bagaimana saya bisa membunuh utas proses tertentu tanpa mematikan seluruh proses. Saya mengerti bahwa mungkin tidak mungkin sama sekali dalam beberapa kasus ketika ada ketergantungan fatal pada utas tertentu. Tetapi, apakah itu mungkin? Apakah ya, bagaimana?
Saya mencoba kill 799
dan prosesnya sendiri dihentikan. Sekarang saya tidak yakin ini karena ada dependensi yang membuat myp
gagal tanpa proses 800
atau karena membunuh sederhana tidak dapat membunuh proses individu.
sumber
Jawaban kanonik untuk pertanyaan ini adalah: Dengan kerja sama proses, dengan mekanisme apa pun yang disediakannya. Tanpa kerja sama proses, itu tidak mungkin. Bahwa proses terdiri dari utas adalah detail internal dari proses yang, dengan desain yang disengaja, tidak diekspos di luar proses.
sumber
gdb
) ke proses, memerintahkan semua utas untuk membuang tumpukan, dan kemudian lepas.Di atas jawaban @ gkv Anda dapat melihat fungsi
pthread_cancel(3)
, bagian dari<pthread.h>
. Dari halaman manual:sumber
Anda mungkin menemukan tgkill () berguna. Ini spesifik untuk Linux seperti yang disebutkan dalam manual.
sumber