English 中文(简体)
在一个已翻新的方案中,是否会有信号处理器的安全?
原标题:Is fork (supposed to be) safe from signal handlers in a threaded program?

I m 真正不确定的是,在有线虫和信号的情况下,PPOSIX将安全置于fork之上。 fork被列为“合成-信号-安全”功能之一,但如果有可能,《图书馆守则》已登记<>pthread_atfork,但不是“inc-signal-safe”的操作器,这是否否定了fork的安全? 答案是否取决于信号手在哪里运行的路面是否在利用台人需要的资源的中间? 或者说,另一种方式是,如果顶端操作员利用同步资源(交换资源等),但fork正在从一个信号手里叫来,该信已经用了,永远无法利用这些资源,方案是否一致?

基于这一问题,如果使用<代码>pthread_atfork建议的分部分在系统图书馆内部实施“校对-安全”引诱。 (在预告器上安装了所有锁,并在母子和儿童邮局操作器上释放了所有锁),然后是<条码>。 在一项已翻新的方案中使用信号处理器永远不会安全? 能否将信号的校对处理放在下列电话的中间: Smalloc> 开放<>/code>/,并保持全球锁,从而在fork上陷入僵局?

最后,即使<代码>fork在信号处理器上是安全的,在信号发送器上打上<>fork然后从信号发送器上回来,或者在信号发送器上打上fork的电话总是需要随后打电话到_exit。 或<代码>exec,在信号发送人返回之前的职能范围?

最佳回答

我最充分地回答所有分问题;我很抱歉,其中一些问题比理想的情况更模糊:

If there is a possibility that library code has registered pthread_atfork handlers which are not async-signal-safe, does this negate the safety of fork?

是的。 rel=“noreferer”>fork documentation 明确提到这一点:

   When the application calls fork() from a signal handler and any of the
   fork handlers registered by pthread_atfork() calls a function that is
   not asynch-signal-safe, the behavior is undefined.

当然,这意味着你可以实际使用pthread_atfork (,其用意是使多面阅读的图书馆具有透明度,使其相信这些图书馆是单一阅读的,因为光辉的同步功能中没有一个是合成孔径-信号-安全;这被认为是光谱中的一个缺陷,见。 http://www. opengroup.org/austin/aardvark/latest/xshbug3.txt (关于“L16723”的研究)。

Does the answer depend on whether the thread in which the signal handler is running could be in the middle of using a resource that the atfork handlers need? Or said a different way, if the atfork handlers make use of synchronization resources (mutexes, etc.) but fork is being called from a signal handler which executed in a thread that never accesses these resources, is the program conforming?

严格地说,答案是没有的,因为根据具体情况,职能要么是作为同义词,要么是不是;没有“在某些情况下安全”的概念。 在实践中,你可能完全放弃,但你会很容易受到cl然的、但又不正确的执行,从而不以你所期望的方式分割其资源。

Building on this question, if "thread-safe" forking is implemented internally in the system library using the idioms suggested by pthread_atfork (obtain all locks in the prefork handler and release all locks in both the parent and child postfork handlers), then is fork ever safe to use from signal handlers in a threaded program? Isn t it possible that the thread handling the signal could be in the middle of a call to malloc or fopen/fclose and holding a global lock, resulting in deadlock during fork?

如果能以这种方式实施,那么,你从信号手里收回fork(>>,永远不会安全,因为如果电话已经听起来,试图获得锁可能会陷入僵局。 但这意味着使用这种方法的实施不会符合要求。

仅举一例,它就没有这样做了,而是采取了两种做法:首先,它获得的锁套是休妻的(如果目前的胎面已经消失,其锁定将只会增加);此外,在儿童过程中,它只是单方面地超越了所有锁锁——见<条码>的摘录/准则>。

  /* Reset the file list.  These are recursive mutexes.  */
  fresetlockfiles ();

  /* Reset locks in the I/O code.  */
  _IO_list_resetlock ();

  /* Reset the lock the dynamic loader uses to protect its data.  */
  __rtld_lock_initialize (GL(dl_load_lock));

<代码>resetlock和lock_ initialize 功能最终称为“glibc s Internal amount of pthread_mutex_init(,不论等待者如何,均有效重订该校正。

我认为,理论是,通过获得(收回)锁锁,它保证,任何其它read子都不会触动数据结构(至少可能造成坠毁),然后重新打开单个锁,确保资源被永久冻结。 (打破目前的read锁是安全的,因为现在没有其他的线索来争夺数据结构,而且实际上在任何功能用锁返回之前就打赢了。)

我不会百分之百地相信,这涵盖所有突发事件(特别是如果/当信号手返回时,刚刚失窃的锁定功能将试图打破锁定,内部停机功能会保护人们避免锁定太多时间!) 但看来,一个可行的计划could,将建筑在星号-信号-航道上。

Finally, even if fork is safe in signal handlers, is it safe to fork in a signal handler and then return from the signal handler, or does a call to fork in a signal handler always necessitate a subsequent call to _exit or one of the exec family of functions before the signal handler returns?

我假设你再次谈论儿童进程? (如果fork(>>_ async-signal-safe>就意味着什么时候可以返回父母!)

我没有发现其他国家(尽管我可能已经错过)的幽灵中的任何东西,但我认为,should be 是安全的——至少是安全的——因为从儿童信号手里返回并不意味着自己没有界定的行为,尽管多面过程刚刚启动这一事实可能意味着exec*(_exit()。

问题回答

添加这一答案是因为它看上去的是fork(<>>>>/code>可能不再被视为合成安全。 至少在<代码>glibc上似乎就是如此,但PPOSIX可能不再提供支持。 目前称为“接受”的答案似乎得出这样的结论,即它是安全的,但至少是在<条码>glibc上,这可能不是这种情况。

在这个问题的基础上,如果在系统图书馆内使用校正建议的内容(在前导手里安装所有锁,在母子和小哨处理器上释放所有锁),那么,在校方的节目中,从信号处理器那里可以安全使用吗? 能否在呼吁小或露天/cl和保持全球锁的中间点处理信号,从而在 for中造成僵局?

确实! 参看。 开放小组决心从

联合国

口译委员会认为,......应作以下解释性增补:Pg 78 第864条“另外,从信号手提的叉车上_起的叉车上的叉车,必须作为合成安全”。

glibc Bug 4737 指明了一项决议,将fork(>从“inc-safe”职能清单中驱逐,并)用于填表。 不幸的是,它作为<代码>WONTFIX得到解决,因此甚至没有更新这些单页。

在信号手里使用叉应当罚款。

read子——像一个坏的主意一样。

为了回答您的原始问题,由于执行信号使无法使用信号,因此,铺面无法保证任何透视功能的安全。

Oh,如果你在信号手里 for,就不允许儿童从信号手里返回。 这一点没有界定。

Here https://www.securecoding.cert.org/confluence/display/seccode/SIG30-C.+Call+only+asynchronous-safe+functions+within+signal+handlers

a for被列为“Aync-signal”安全,因此可以使用。

POSIX

The following table from the the Open Group Base Specifications [Open Group 2004], defines a set of functions that are asynchronous—signal-safe. Applications may invoke these functions, without restriction, from signal handler.

定时——签字-安全职能

<>strong>fork()





相关问题
Fastest method for running a binary search on a file in C?

For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

Encoding, decoding an integer to a char array

Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...

热门标签