这个问题是this question的后续行动。
当posix_spawn()
发出bash命令时,我收到消息:
bash:此shell中没有作业控制
我认为是因为在fork序列中调用函数setsid()
而我不知道在使用posix_spawn()
时如何模拟此操作。
有没有办法为bash流程创建新会话?
答案 0 :(得分:2)
你做不到。它不是当前posix_spawn
接口的一部分。
在http://austingroupbugs.net/view.php?id=1044讨论了添加它
并且显然至少有一个实现(QNX)提供POSIX_SPAWN_SETSID
作为扩展,但为了保持标准兼容,您需要使用fork
。
如果父进程很小,使用fork
不应该是一个问题,所以我想,为了充分利用这两个方面,你可以使用posix_spawn
来启动一个小帮助二进制文件{ {1}}并致电forks
。
使用setsid
的IMO应该是非常罕见的,因为双重执行的额外成本可以忽略不计。