| #! /bin/sh |
| |
| linux_check_ptrace_scope() |
| { |
| if grep -q '1' </proc/sys/kernel/yama/ptrace_scope; then |
| cat <<EOF |
| Your system prevents the use of PTRACE to attach to non-child processes. The core file |
| cannot be generated. Please reset /proc/sys/kernel/yama/ptrace_scope to 0 (requires root |
| privileges) to enable core generation via gcore. |
| EOF |
| exit 1 |
| fi |
| } |
| |
| set -e -x |
| |
| OS=$(uname -s) |
| if [ "$OS" = Linux ]; then |
| linux_check_ptrace_scope |
| fi |
| |
| rm -f a.out |
| make -f main.mk |
| |
| cat <<EOF |
| Executable file is in a.out. |
| Core file will be saved as core.<pid>. |
| EOF |
| |
| stack_size=`ulimit -s` |
| |
| # Decrease stack size to 16k => smaller core files. |
| # gcore won't run with the smaller stack |
| ulimit -Ss 16 |
| |
| core_dump_filter=`cat /proc/self/coredump_filter` |
| echo 0 > /proc/self/coredump_filter |
| |
| ./a.out & |
| |
| pid=$! |
| |
| echo $core_dump_filter > /proc/self/coredump_filter |
| |
| # Reset stack size as so there's enough space to run gcore. |
| ulimit -s $stack_size |
| |
| echo "Sleeping for 5 seconds to wait for $pid" |
| |
| sleep 5 |
| echo "Taking core from process $pid" |
| |
| gcore -o core $pid |
| |
| echo "Killing process $pid" |
| kill -9 $pid |