微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

叉的asynchronous信号安全

根据Oracle的multithreading编程指南 , fork()应该是安全的内部信号处理程序。 但是我的程序被卡在信号处理程序中跟踪回溯:

#0 __lll_lock_wait_private () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:95 #1 0x00007f86e6a9990d in _L_lock_48 () from /lib/x86_64-linux- gnu/libc.so.6 #2 0x00007f86e6a922ec in ptmalloc_lock_all () at arena.c:242 #3 0x00007f86e6ad5e82 in __libc_fork () at ./nptl/sysdeps/unix/sysv/linux/x86_64/../fork.c:95 #4 0x00007f86e7d9f125 in __fork () at ./nptl/sysdeps/unix/sysv/linux/pt-fork.c:25 .... #7 signal handler called

那么malloc在信号处理程序中如何使用fork不是安全的?

提前致谢。

malloc / free是一个由libc提供的系统调用或库例程吗?

如何在WP8.1的固定位置放置广告c#

OpenCV_FOUND为FALSE,因此包“OpenCV”被认为是未find的

检查Qt c + +应用程序是否作为sudo运行

DLL无法加载在Windows Server 2012中

多个端口服务器没有得到所有的传输

我们是否确实需要与“PTHREAD_MUTEX_ROBUST”相反的属性“PTHREAD_MUTEX_STALLED”的互斥锁?

我如何交叉编译GNU GLEW到windows我正在交叉编译的程序?

如何接收哪个键被按下的信息?

使用模拟来启动进程(间接)在C#

fork()将通过复制父母的一些内存来启动一个新的进程,但都是单独的进程。 所以使用内部信号处理器是安全的。 下面是运行孩子的例子….

#include <stdio.h> #include <unistd.h> #include <signal.h> #include <stdlib.h> int SHOULD_RUN = 1; void int_sig_handler(int signal){ printf("SIG_INTn"); if(fork() == 0){ // child code printf("I am Child"); //signal(SIGINT,int_sig_handler); SHOULD_RUN = 1; while(SHOULD_RUN){ printf("I am Running Still...n"); sleep(1); } exit(0); }else{ // parent code printf("parent"); } SHOULD_RUN = 0; } int main(int argc,const char *argv[]){ signal(SIGINT,int_sig_handler); while(SHOULD_RUN){ sleep(1); } return 0; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐