在 posix_spawn() 创建的过程中调用 setsid()
Posted
技术标签:
【中文标题】在 posix_spawn() 创建的过程中调用 setsid()【英文标题】:Calling setsid() at proc created by posix_spawn() 【发布时间】:2016-08-14 13:12:36 【问题描述】:这个问题是this question的后续问题。
posix_spawn()
发出 bash 命令时,我收到消息:
bash: 在这个 shell 中没有作业控制
我认为是因为在fork序列中调用了函数setsid()
,而我不知道如何在使用posix_spawn()
时模拟这个操作。
有没有办法为 bash 进程创建新会话?
【问题讨论】:
【参考方案1】:你不能。它不是当前posix_spawn
接口的一部分。
已在http://austingroupbugs.net/view.php?id=1044 讨论了添加它
显然至少有一个实现(QNX)提供POSIX_SPAWN_SETSID
作为扩展,但要保持标准兼容,您需要使用fork
。
如果父进程很小,使用fork
应该不是问题,所以我想为了两全其美,您可以使用posix_spawn
启动一个小型辅助二进制文件forks
并调用setsid
。
IMO,使用setsid
应该很少见,以至于双重执行的额外成本可以忽略不计。
【讨论】:
以上是关于在 posix_spawn() 创建的过程中调用 setsid()的主要内容,如果未能解决你的问题,请参考以下文章
解决 Sourcetree 报错 Couldn't posix_spawn: error 2 问题