我使用了以下命令这个问题测试一下使用socat搭建一个信号丰富的终端:
socat file:'/dev/tty',raw,echo=0 exec:'bash -li',pty,stderr,setsid,sigint,sane
在 Linux 上,它运行良好,一切都如预期。
在 OSX 上,我得到以下输出:
2023/03/24 22:15:52 socat[35049] E waitpid(): child 35050 exited on signal 9
是什么原因导致 OSX 在此处杀死子进程? 是否有可能阻止这种情况发生?
出于好奇,我尝试sudo
并得到了相同的结果,所以我可以确认它与用户权限有关。
答案1
我尝试了各种选项,发现如果-i
没有传递,那么进程就不会被终止。
socat file:'/dev/tty',raw,echo=0 exec:'bash -l',pty,stderr,setsid,sigint,sane
奇怪的是,无论如何,bash 看起来都是作为交互式 shell 启动的,正如我们所料,因为没有传递任何命令。
echo $-
himBH
不知何故,传递该-i
选项会导致 OSX 感到愤怒,尽管它应该没有任何效果。