Trước đây khi tôi cần chẩn đoán điều gì đó như thế này, tôi đã sử dụng tập lệnh kill.d từ Brendan Gregg :
dtrace:::BEGIN
{
/* Print header */
printf("%5s %12s %5s %-6s %s\n","FROM","COMMAND","SIG","TO","RESULT");
}
syscall::kill:entry
{
/* Record target PID and signal */
self->target = arg0;
self->signal = arg1;
}
syscall::kill:return
{
/* Print source, target, and result */
printf("%5d %12s %5d %-6d %d\n",
pid,execname,self->signal,self->target,(int)arg0);
/* Cleanup memory */
self->target = 0;
self->signal = 0;
}
Chạy nó và sau đó chạy killall Finder
trong shell khác dẫn đến:
[user@fozzy Scripts]$ sudo kill.d.sh
FROM COMMAND SIG TO RESULT
155 launchd 15 4294900609 -1
66872 killall 15 66687 0
Nó cho bạn biết cái gì (killall tại PID 66872 với Tín hiệu 15) đã giết quá trình nào (trong trường hợp này là 66687 phiên bản Finder sau đó đang chạy của tôi) và kết quả. Nó làm chậm hệ thống một chút trong khi chạy, nhưng sẽ cung cấp cho bạn kết quả bạn cần - chỉ cần ghi chú về Finder Finder của bạn trước khi sử dụng, sau đó để nó chạy (trong khi bạn đang làm việc hoặc qua đêm để tránh làm gián đoạn công việc của bạn ) và nhìn xem điều gì đã giết chết PID đó.