Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.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
如果不可重入的linux函数(比如select)没有完成执行,会发生什么情况?_C_Linux_Reentrancy - Fatal编程技术网

如果不可重入的linux函数(比如select)没有完成执行,会发生什么情况?

如果不可重入的linux函数(比如select)没有完成执行,会发生什么情况?,c,linux,reentrancy,C,Linux,Reentrancy,我在阅读时了解到“选择”是不可重入的。如果信号在我们中间传递时会发生什么(例如SigKEY)。这是否意味着我们再也不能使用它了 我试图解决我在阅读中所遇到的问题,虽然可能是因为这个原因。 < P>如果在调用“代码”的过程中传递一个信号>选择< /代码>,那么选择< /C> >将返回 -1 ,并将 Ern0< /代码>设置为 ETEN/。这将结束对select的调用,您可以再次调用select 您不能做的是在信号处理程序内部调用select。因为在这种情况下,在第一个select返回之前,您正在调

我在阅读时了解到“选择”是不可重入的。如果信号在我们中间传递时会发生什么(例如SigKEY)。这是否意味着我们再也不能使用它了


我试图解决我在阅读中所遇到的问题,虽然可能是因为这个原因。

< P>如果在调用“代码”的过程中传递一个信号>选择< /代码>,那么<代码>选择< /C> >将返回<代码> -1 ,并将<代码> Ern0< /代码>设置为<代码> ETEN/<代码>。这将结束对
select
的调用,您可以再次调用
select

您不能做的是在信号处理程序内部调用
select
。因为在这种情况下,在第一个
select
返回之前,您正在调用
select
。但当然,在信号处理程序中调用
select
是没有意义的,所以无论如何都不会这样做


底线:如果信号被正确处理,在信号之后没有理由不能再调用<代码>选择< /代码>。< /P> < P>如果在调用“代码”时选择一个信号,请选择< <代码> >,然后<代码>选择< /代码>将返回<代码> -1 < /代码>,并将<代码> Ern0< /代码>设置为<代码> ETEN/<代码>。这将结束对

select
的调用,您可以再次调用
select

您不能做的是在信号处理程序内部调用
select
。因为在这种情况下,在第一个
select
返回之前,您正在调用
select
。但当然,在信号处理程序中调用
select
是没有意义的,所以无论如何都不会这样做


一句话:如果信号处理正确,没有理由不能在信号发出后再次调用
select

SIGKILL是信号的Avada-Kedavra。如果你收到那个信号,你就死定了,你妈妈的爱也不会保护你。西格基尔是信号的化身。如果你收到那个信号,你就死了,你妈妈的爱也不能保护你。如果信号是SIGKILL呢?
select
如何处理SIGKILL?@kptlronyttcna我承认我忽略了你对信号示例的选择,因为如果你的程序接收到SIGKILL,那么它就会终止。在这种情况下,这个问题没有任何意义。问题是在SIGKILL之后,我不能再使用
read
select
。即使我关闭程序并再次打开它。@kptlronyttcna是的,我读了另一个问题,但我没有答案。这个问题中没有足够的代码让人重现这个问题。所以很难知道出了什么问题。如果信号是SIGKILL怎么办?
select
如何处理SIGKILL?@kptlronyttcna我承认我忽略了你对信号示例的选择,因为如果你的程序接收到SIGKILL,那么它就会终止。在这种情况下,这个问题没有任何意义。问题是在SIGKILL之后,我不能再使用
read
select
。即使我关闭程序并再次打开它。@kptlronyttcna是的,我读了另一个问题,但我没有答案。这个问题中没有足够的代码让人重现这个问题。所以很难知道出了什么问题。