Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C ungetle exit()是否可以接受处理严重错误的方法?_C_Error Handling_Crash_Pthreads_Exit - Fatal编程技术网

C ungetle exit()是否可以接受处理严重错误的方法?

C ungetle exit()是否可以接受处理严重错误的方法?,c,error-handling,crash,pthreads,exit,C,Error Handling,Crash,Pthreads,Exit,在多线程C程序中,由于严重的程序错误,温和的程序退出很难实现,使用exit_group()是硬退出函数停止程序执行的可接受方式 我指的是非常严重且不可恢复的错误,任何进一步的操作都可能损坏文件系统和数据库。我有点担心潜在的资源泄漏。事实上,甚至没有泄漏,而是锁定-因此,进程在没有重新启动的情况下无法重新启动,因为某些资源将保留 所讨论的操作系统是现代Linux(4.x内核)exit运行在atexit或上注册的清理处理程序,刷新stdio流,并执行许多其他清理。对于真正严重的错误(如可能被利用的内

在多线程C程序中,由于严重的程序错误,温和的程序退出很难实现,使用
exit_group()是硬退出函数停止程序执行的可接受方式

我指的是非常严重且不可恢复的错误,任何进一步的操作都可能损坏文件系统和数据库。我有点担心潜在的资源泄漏。事实上,甚至没有泄漏,而是锁定-因此,进程在没有重新启动的情况下无法重新启动,因为某些资源将保留


所讨论的操作系统是现代Linux(4.x内核)

exit
运行在
atexit
上注册的清理处理程序,刷新stdio流,并执行许多其他清理。对于真正严重的错误(如可能被利用的内存损坏),
\u exit
将是一个更安全的选择。在较旧的glibc版本中,
abort
(或
assert(false)
)也会刷新stdio流。另一种选择是执行未定义的指令。

这完全取决于a)您使用的操作系统和b)您使用的资源类型。许多资源在进程退出时自动释放和解锁,但其他资源可能会保留(sysv shm/信号量,例如锁文件等)。例如,对于sysv信号量操作,您可以指定
SEM\u UNDO
来撤消进程退出时的操作您关心哪种锁?您使用的是任何类型的共享内存,还是进程中被终止的线程之间发生了严格的锁定?@dbush我最关心的是inotify手表和sqlite数据库。因为保险丝能很好地处理不牢固的碰撞。它的设计正是为了做到这一点。还有信号量和同步资源。@Ctx据我所知,我需要
SEM\u UNDO
pthread\u mutexattr\u setrobust
当我使用多进程体系结构或只杀死一个线程时,对吗?这样程序中就不会出现死锁。但若程序是单进程的,并且我正在杀死所有线程,那个么我就不需要健壮的互斥,对吗?@Lapsio取决于您是使用pthread互斥还是sysv信号量。这是两种不同的机制。从您编写的内容来看,带有SEM_UNDO的sysv信号量看起来更合适