我有一個從腳本運行的進程myprocess
。是否有可能檢查此過程是否成功執行或崩潰?如何知道正在運行的後臺進程是否爲
這是我的腳本看起來像
myprocess 12 &
sleep 12
# I want to check here if the process crashed
爲什麼我在運行過程中的背景原因很簡單。我想在sleep
之前完成其他任務。醒來後,我想看看這個過程是否正常退出或崩潰(轉儲核心)。
PS:如果需要其他細節或更多代碼,請在下面留言。
我有一個從腳本運行的進程myprocess
。是否有可能檢查此過程是否成功執行或崩潰?如何知道正在運行的後臺進程是否爲
這是我的腳本看起來像
myprocess 12 &
sleep 12
# I want to check here if the process crashed
爲什麼我在運行過程中的背景原因很簡單。我想在sleep
之前完成其他任務。醒來後,我想看看這個過程是否正常退出或崩潰(轉儲核心)。
PS:如果需要其他細節或更多代碼,請在下面留言。
假設你DO NOT HAVE名爲上core
文件您$PWD
(否則會被刪除),這是懶辦法做到這一點:
(請注意,這 [在懶核心文件的方法只有]假設的sysctl的正確參數化fs.suid_dumpable
如果myprocess
將其privilege levels changed or is execute only。還要注意的是kernel.core_pattern
設置可能會導致核心文件轉儲somewh其他人不在$PWD
。請參閱this article以正確設置它。感謝@alvits指出了這兩個潛在的問題。無論如何,我真的不推薦以下核心文件的方式的使用。)
#!/bin/bash
rm -f core
ulimit -c unlimited
myprocess 12 &
# ... Do your stuff ...
sleep 12
if [ -f core ]; then
echo "This is a minimal example to show that the program dumped core."
fi
另外請注意,這僅適用於如果同時沒有別的轉儲核心$PWD
一個清潔做法:
#!/bin/bash
(rm -f /tmp/myprocess.success && myprocess 12 && touch /tmp/myprocess.success) &
# ... Do your stuff ...
sleep 12
if [ -f /tmp/myprocess.success ]; then
echo "myprocess returned EXIT_SUCCESS. But if it didn't returned before sleep 12 elapsed, this will fail."
fi
的正確辦法做到這一點:
#!/bin/bash
myprocess &
# Store myprocess PID
MYPROCESS_PID="$!"
# ... Do your stuff here ....
# Wait until myprocess returns
wait "${MYPROCESS_PID}"
# Store myprocess exit status (returned by wait)
$ret="$?"
if [ "${ret}" -gt 0 ]; then
echo "Myprocess didn't exited with EXIT_SUCCESS"
fi
哪個操作系統? – pah
我正在使用linux –
你不能任意假定內核允許核心轉儲。內核參數'fs.suid_dumpable'允許/禁止核心轉儲。在大多數RHEL 6.8+派生中,這被設置爲禁止。您還需要找到放置核心轉儲的位置。默認值是在'pwd'中,但它可以配置爲轉儲到其他地方並使用不同的名稱模式。這在'kernel.core_pattern'中設置。 – alvits