2012-11-05 47 views
1

生成從C程序核心可能重複:
How can a C program produce a core dump of itself without terminating?在Solaris

我想生成從C程序的芯而不終止正在運行的進程。 操作系統是Solaris。

我知道gcore可以用於此目的。但我不知道如何使用C程序中的'gcore'。

+0

這是否需要通過程序來完成?您可以在gdb中附加並運行命令generate-core-file來獲取核心。 – dbeer

+0

我不希望程序過早結束,我希望它運行,但希望在特定行中捕獲內核,同時繼續流動。順便說一句,我也不能使用gdb,因爲它發生在生產環境中。我只能更改代碼並將exec複製到prod m/c,運行該程序並檢查覈心轉儲。 –

+0

例如:AIX上的gencore()在http://pic.dhe.ibm.com/infocenter/aix/v6r1/index.jsp?topic=%2Fcom.ibm.aix.basetechref%2Fdoc%2Fbasetrf1%2Fgencore .htm,我正在尋找類似的solaris編程方式.. –

回答

1

gcore在C中實現,源代碼爲available,所以顯然可以複製它的功能。然而,從源頭上看,它使用了半私有的庫,其核心生成代碼相當複雜。

這似乎是簡單地使用system(3)或它的一些變種援引gcore最好的選擇:

int gcore(pid_t pid) 
{ 
    char *cmd[256]; 
    snprintf(cmd, sizeof cmd, "gcore %ld", (long) pid); 
    // returns 0 on success, -1 on system failure (errno set), or >0 on 
    // gcore failure (in which case use the W* macros defined in 
    // <sys/wait.h> to extract additional information from value). 
    return system(cmd); 
} 

(Link to <sys/wait.h> docs.)