En macOS, encuentro que SIGABRT no generará volcados de memoria en algunos casos.
Por ejemplo, ejecuto un sueño en una terminal:
lianxin.wlx@mbp [01:08:21] [~/test] -> % sleep 1000Y enviarle un SIGABRT en otro terminal:
lianxin.wlx@mbp [01:08:59] [~] -> % ps -ef | grep sleep 502 47679 20388 0 1:08AM ttys001 0:00.01 sleep 1000 lianxin.wlx@mbp [01:09:03] [~] -> % kill -6 47679A continuación, se anula el proceso de suspensión, pero no se genera ningún volcado de núcleo.
lianxin.wlx@mbp [01:08:21] [~/test] -> % sleep 1000 [1] 47679 abort sleep 1000 lianxin.wlx@mbp [01:10:35] [~/test] -> % ls /cores lianxin.wlx@mbp [01:10:37] [~/test] -> %¿Entonces por qué? Probé las mismas operaciones en Linux, generó un volcado de memoria.
Estoy seguro de que abrí el volcado del núcleo correctamente ( ulimit -c unlimited y el privilegio de /cores es 777). Escribí un programa que fallará con SIGSEGV y generó un volcado de memoria en /cores.
Si haces un programa simple,
main() { abort(); }Generará un volcado del núcleo si se ejecuta con el priv apropiado. Además, si haces un:
main() { sleep(100); }ejecútelo en segundo plano y elimine -ABRT, generará un volcado del núcleo. Pero /bin/sleep no lo hace, lo cual es un poco extraño.
Esto supone que ha seguido la receta en man core .