侦听 TCP 端口 0 会为我分配一个系统上的空闲端口号。
但是当我尝试连接到 TCP 端口 0时会发生什么?显而易见的答案是:“它不起作用”:
$ nc localhost 0
nc: port number too small: 0
Run Code Online (Sandbox Code Playgroud)
这是在系统中的哪个位置处理的?在操作系统内核的 TCP 堆栈中?是否有 Unix 可以连接到 TCP 端口 0?
从这个答案中我们了解到,您可以通过 Linux PID 命名空间实现对整个进程子树的可靠终止unshare -p。
这是我不明白的问题:
仅当我使用-f/--fork选项取消共享时它才有效。
unshare -fp -- bash -c "watch /bin/sleep 10000 && echo hi"
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,kill -9那个的PID bash,然后观看,睡眠等都死了,正如我所希望的那样。
但是当我使用它时没有-f:
unshare -p -- bash -c "watch /bin/sleep 10000 && echo hi"
Run Code Online (Sandbox Code Playgroud)
和kill -9bash PID,然后将其watch重新设置为PID 1(在我的Ubuntu上是systemd),所以我没有达到杀死所有孩子的预期效果。
问题:
--fork必须要达到预期的效果?为什么不unshare使用exec()fork 还不够?kill -9而创建的 PID 。unshare但是当我使用 时--fork,杀死我开始时返回的 pidunshare将简单地杀死unshare并bash …我的systemctl status节目:
? mymachine
State: running
Jobs: 4 queued
Run Code Online (Sandbox Code Playgroud)
我如何列出queued工作?
这个答案显示了如何列出失败的单元,但我找不到关于如何列出这 4 个排队单元的任何文档,我也不清楚哪个状态systemctl list-units --state=help对应于那些。