![为什么具有丰富终端的 socat 在 OSX 上会被信号 9 杀死?](https://linux22.com/image/1686872/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%85%B7%E6%9C%89%E4%B8%B0%E5%AF%8C%E7%BB%88%E7%AB%AF%E7%9A%84%20socat%20%E5%9C%A8%20OSX%20%E4%B8%8A%E4%BC%9A%E8%A2%AB%E4%BF%A1%E5%8F%B7%209%20%E6%9D%80%E6%AD%BB%EF%BC%9F.png)
我使用了以下命令这个问题测试一下使用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 感到愤怒,尽管它应该没有任何效果。