我gssproxy
在Arch Linux下使用,特别是
Name : gssproxy
Version : 0.8.0-1
/usr/bin/gssproxy
我遇到了以下行为:当尝试像这样通过管道传输输出时
/usr/bin/gssproxy | cat
它会阻塞。但是,当我运行此命令时:
/usr/bin/gssproxy
它不会阻塞,而是在后台创建另一个进程
root 13720 0.0 0.0 59732 584 ? Ssl 11:44 0:00 /usr/bin/gssproxy
并且存在。
我承认通过管道传输 的输出可能没有意义gssproxy
,但我仍然想知道为什么会发生这种行为?特别是,什么原因导致cat
阻塞?
编辑:
我所说的阻塞是指以下命令:
timeout -k 1 1 /usr/bin/gssproxy | cat
,
不终止,同时
timeout -k 1 1 /usr/bin/gssproxy
立即终止。两个命令都gssproxy
在后台生成进程。我想知道为什么第一个命令没有像我预期的那样在 1 秒后终止?
答案1
正如@Kusalananda 提到的,gssproxy
作为守护进程运行,父进程可能会等待,直到它的子进程退出。
这是一个模拟相同情况的简短 shell 脚本。
$ cat t1
#!/bin/bash
sleep 10 &
$ date; ./t1 | cat ; date
Sun Apr 7 10:59:02 BST 2019
Sun Apr 7 10:59:12 BST 2019
日期命令纯粹是为了显示子进程存在后(10秒)cat终止