Как приложение может обнаружить, что оно только что закончилось? Могу ли я использовать обработчик сигналов для этого?Как обнаружить завершение программы в C/Linux?
ответ
Включить atexit()
. Он вызывается функцией, когда программа прерывается нормально.
Пример кода:
#include <stdio.h>
#include <stdlib.h>
void funcall(void);
void fnExit1 (void)
{
printf ("Exit function \n");
}
int main()
{
atexit (fnExit1);
printf ("Main function start\n");
funcall();
printf ("Main function end\n");
return 0;
}
void funcall(void)
{
sleep(2);
exit(0);
}
Выход:
Main function start
Exit function
Atexit() запускается после того, как все потоки в приложении завершены? –
@ LunarMushrooms Да – sujin
Вы могли бы попробовать --->
int raise (int sig)
И когда ручка SIGTERM
или SIGKILL
поднимается !!
Я хочу поймать самоограничение (не только по запросу другого процесса). Например, Ctrl + \, Ctr + C или assert, сбой и т. Д. Таким образом, SIGTERM и SIGKILL не являются единственными сигналами, которые необходимо обработать. Мне нужно одно место, где я могу справиться со всеми делами. –
Вы также можете зарегистрировать функцию, которая будет вызываться при выходе из процесса. См. man atexit
Вы можете установить обработчик сигналов для SIGINT, SIGKILL и SIGSEGV. В обработчике сигнала вы можете взять дамп стека, чтобы позже вы могли отлаживать ваше приложение. В обработчике сигнала устанавливаются значения SIGINT, SIGKILL и SIGSEGV по умолчанию.
- 1. Как обнаружить завершение программы в Android?
- 2. Завершение программы
- 3. завершение программы в solrj
- 4. Завершение программы в Python
- 5. Как обнаружить завершение HTTP-запроса в angular1
- 6. Как распечатать завершение этой программы?
- 7. Завершение программы scala?
- 8. Eclipse - Завершение программы
- 9. Завершение программы консоли NodeJS
- 10. Завершение программы без потоков
- 11. Завершение программы в точке отладки?
- 12. завершение работы программы в скрипте вызывающей оболочки
- 13. Запрос на завершение программы
- 14. Завершение работы программы Python
- 15. открытых() вызывает завершение программы
- 16. Завершение вывода покерной программы
- 17. Правильно обнаружить завершение одновременных SKActions
- 18. Как обнаружить OS принудительное завершение работы приложения
- 19. завершение интерактивной программы из партии
- 20. Увеличение памяти и завершение программы
- 21. Правильное многопоточное завершение программы. C
- 22. Неожиданное завершение моей Java-программы
- 23. Захват исключения и завершение программы
- 24. Завершение программы для предотвращения нитей
- 25. завершение программы через system.exit (0) в java
- 26. Обнаружить завершение анимации упреждающего программирования UIPopoverController
- 27. Завершение работы Java-программы в Linux
- 28. неожиданное завершение работы программы в цикле
- 29. Как обнаружить завершение приложения в расширении ядра, Mac OS X
- 30. Когда необходимо обнаружить завершение работы приложения?
да, если это не прекращается по сигналу Kill. Взгляните на «сигнал» в руководстве ('man signal') – BRFennPocock
Вместо этого вы должны использовать' sigaction', поскольку он более портативен. –