从 /usr/bin/gssproxy 进行管道输出时 Cat 阻塞(`timeout -k 1 1 /usr/bin/gssproxy | cat` 不会终止)

从 /usr/bin/gssproxy 进行管道输出时 Cat 阻塞(`timeout -k 1 1 /usr/bin/gssproxy | cat` 不会终止)

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终止

相关内容