2009-08-31 47 views
2

我的Java(Eclipse)應用程序正在產生一個子進程,監視它的stdout流和退出值。當子進程崩潰時,SIGABRT沒有創建核心轉儲文件。如果我手動啓動子進程並殺死它,那麼核心轉儲就沒有問題了。從Java產生的進程的核心轉儲

我找不到有關JVM是否以某種方式準備子進程(例如,將核心轉儲文件大小設置爲0)的任何信息。

是否有人知道可能發生了什麼以及需要更改哪些設置以便創建核心轉儲?

這是在Suse 10和Ubuntu 9.04上,如果Java 5和Java 6有區別的話。

問候, 維拉德

+0

請問您能否添加詳細信息,例如描述您如何生成子進程的代碼片段? – 2009-08-31 10:03:17

+0

如果你的當前工作目錄不能被進程寫入,我認爲不會產生核心轉儲。這有可能嗎? – 2009-08-31 10:32:39

+0

工作目錄是可寫的。完全相同的應用程序手動啓動,生成代碼轉儲。 – 2009-08-31 10:37:27

回答

3

通常,核心文件的(非)創建由ulimit命令(具體的ulimit -c)控制。有關詳細信息,請參閱help ulimit(在bash中)。

此設置應該從shell繼承到subshel​​l,所以Java應該使用它在啓動shell的設置。 Java可能會混淆ulimit,但我從來沒有聽說過這樣做。

嘗試在shell中設置ulimit,然後從那裏啓動Java進程。如果這沒有幫助,你可以從Java調用一個設置ulimit的包裝腳本,然後啓動你的程序。

+0

謝謝,我會嘗試使用包裝,並沒有考慮到這一點。 – 2009-08-31 10:04:16

+0

這工作,非常感謝! – 2009-08-31 11:01:02