4

这个问题是这个问题的后续。

当我发出 bash 命令时,posix_spawn()我收到以下消息:

bash:在这个 shell 中没有作业控制

我认为是因为在 fork 序列中有对该函数的调用,setsid()而我不知道如何在使用posix_spawn().

有没有办法为 bash 进程创建新会话?

4

1 回答 1

2

你不能。它不是当前posix_spawn界面的一部分。添加它已在http://austingroupbugs.net/view.php?id=1044进行了讨论, 显然至少有一个实现(QNX)POSIX_SPAWN_SETSID作为扩展提供,但要保持标准兼容,您需要使用fork.

如果父进程很小,使用fork应该不是问题,所以我想为了两全其美,您可以使用posix_spawn启动一个小型辅助二进制文件forks并调用setsid. IMO,使用setsid应该足够少,以至于双重执行的额外成本可以忽略不计。

于 2017-10-19T11:21:18.657 回答