如何在OSX上模拟进程/守护程序崩溃?

10
如何在OSX上触发/模拟进程/守护程序崩溃,并因此收到崩溃报告,报告将保存在/Library/Logs/DiagnosticRepors中(例如opendirectoryd_2013-06-11-125032_macmini61.crash)?我尝试使用“活动监视器”强制退出守护程序,但是没有收到任何报告。我需要崩溃一些系统或第三方进程(不是由我开发的)。请按要求保留HTML标记格式。
2个回答

19
您可以通过发送“分段违规”信号来迫使几乎任何进程崩溃。
示例:查找“opendirectoryd”的进程id: $ ps -ef | grep opendirectoryd 0 15 1 0 9:14am ?? 0:01.11 /usr/libexec/opendirectoryd ^-- 进程id
向该进程发送信号: $ sudo kill -SEGV 15
这将终止该进程并导致诊断报告被写入,可以在“system.log”中验证:
Oct 31 09:17:17 hostname com.apple.launchd[1] (com.apple.opendirectoryd[15]): Job appears to have crashed: Segmentation fault: 11 Oct 31 09:17:20 hostname ReportCrash[420]: Saved crash report for opendirectoryd[15] version ??? (???) to /Library/Logs/DiagnosticReports/opendirectoryd_2013-10-31-091720_localhost.crash
但请注意,故意崩溃系统服务可能会导致严重问题(系统不稳定、数据丢失等),因此您应该确切知道自己在做什么。

1

除非你能找到一个合法的漏洞并通过这种方式使其崩溃,否则你无法以这种方式外部崩溃一个守护进程,从而导致诊断报告。所有强制退出功能都不包括在诊断报告中,因为它们是外部问题。


5
马丁·R的回答已经明显表明了这是错误的。 - Fatih

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接