我有一个从脚本运行的进程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