2015-06-04 59 views
3

我的應用程序需要以特定模式生成核心文件。如何更改特定應用程序的核心模式?

如何在不影響其他過程的情況下做到這一點?

當/ proc是隻讀時,我該如何做到這一點?

+0

以「特定模式」生成核心文件意味着什麼? – sehe

+0

我想用給定格式的文件名(包含進程的PID等)生成核心文件。這可以通過在/ proc/sys/kernel/core_pattern中設置模式來完成。使用像%p,%e這樣的說明符。但是這種方法會影響全局的核心文件模式。我不希望發生這種情況。我不能改變其他流程和其他流程的核心模式。 –

回答

3

man core告訴我們:

管道核心轉儲到一個程序

由於內核2.6.19,Linux支持的 /proc/sys/kernel/core_pattern文件的替代語法。如果此 文件的第一個字符是管道符號(|),則該行的其餘部分爲 ,將其解釋爲要執行的程序。磁盤文件不是寫入 ,而是將核心轉儲作爲程序的標準輸入。

注意以下幾點:

  • 程序必須使用絕對路徑名(或相對於根目錄中的路徑名 ,/)來指定,並且必須立即 遵循「|」字符。

  • 運行程序創建的進程以用戶和組 root身份運行。

  • 命令行參數可以提供給程序(由於Linux 2.6.24),由空格分隔(總共線長度爲 128字節)。

  • 命令行參數可以包含上面列出的任何%說明符 。例如,要傳遞被轉儲的 進程的PID,請在參數中指定%p。

你可以把一個腳本在那裏,就像例如

| /path/to/myscript %p %s %c 

您可以檢測哪個進程觸發信息轉儲:(man core):

 %% a single % character 
     %p PID of dumped process 
     %u (numeric) real UID of dumped process 
     %g (numeric) real GID of dumped process 
     %s number of signal causing dump 
     %t time of dump, expressed as seconds since the Epoch, 1970-01-01 
      00:00:00 +0000 (UTC) 
     %h hostname (same as nodename returned by uname(2)) 
     %e executable filename (without path prefix) 
     %E pathname of executable, with slashes ('/') replaced by exclama‐ 
      tion marks ('!'). 
     %c core file size soft resource limit of crashing process (since 
      Linux 2.6.24) 

現在你要做的就是「做默認的事情」其他進程比自己

+0

@t_thirupathi好。我的觀點是你可以製作一個腳本,除了你自己的程序之外,還可以做一些默認的事情。如果你不明白答案,不要「虛假地感謝」我。 – sehe

+0

我很抱歉誤會。我喜歡答案。會嘗試一下。 雖然我有幾個問題。 1.是否適用於由應用程序創建的子進程和線程(LWP)? 2.是否有快捷方式列出具有相同核心模式的多個應用程序? 3.是否必須將該進程作爲root運行?我的過程需要以不同的用戶身份運行。 謝謝。 –

+0

1.您可以在您的腳本中實現大多數您希望的邏輯(使用'ps'來查找父進程/進程組,例如。)。 2.對於「列表」應用程序也是如此(一個簡單的bash腳本將使用帶case模式的case ... esac)3.否。腳本將顯式地運行一個根目錄。您可以刪除權限(sudo -u otheruser例如) – sehe

相關問題