栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

没有atfork处理程序的fork + exec

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

没有atfork处理程序的fork + exec

您可以使用

vfork()
(NPTL实现不调用fork处理程序)。尽管POSIX已从
vfork
标准中删除,但您的实现中可能会使用它。

当使用NPTL线程库的多线程程序调用vfork()时,不会调用使用pthread_atfork(3)建立的分叉处理程序。在这种情况下,使用LinuxThreads线程库在程序中调用Fork处理程序。(有关Linux线程库的描述,请参见pthreads(7)。)

或者,

posix_spawn()
。这类似于
vfork
。手册页说:

根据POSIX,它未指定在调用posix_spawn()时是否调用通过pthread_atfork(3)建立的fork处理程序。在glibc上,仅当使用fork(2)创建子项时才调用fork处理程序。

或者,

syscall
直接使用
SYS_clone
SYS_clone
是用于在Linux上创建线程和进程的系统调用号。所以
syscall(SYS_clone,SIGCHLD, 0);
应该工作,只要你会立刻EXEC键。

syscall(SYS_fork);
(由Shachar回答)也可能会起作用。但是请注意,
SYS_fork
在某些平台(例如aarch64,ia64)上不可用。
SYS_fork
在Linux中被认为是过时的,仅是为了向后兼容,Linux内核使用SYS_clone创建所有“类型”的进程。

(注意:这些选项主要限于glibc / Linux)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/403346.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号