侦听 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 -9
bash 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
对应于那些。