fuser命令输出进程ID提取

fuser command output process ID extraction

尝试从 fuser 输出中提取使用给定端口号的进程 ID,如下所示

$ fuser 9092/tcp
9092/tcp:             5920

没有使用 awk 提取 PID

$ fuser 9092/tcp | awk -F: '{print }'
9092/tcp:

从提取的 PID 中,我想 ls -l /proc/5920/exe

ls -l /proc/$(fuser 9092/tcp | awk -F: '{print }')/exe

二进制版本如下:

bash --version  # GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
fuser --version  # fuser (PSmisc) 22.20

fuser 输出的非正式部分转到标准错误。标准输出的输出已经是 computer-readable。 (这是一个功能,不是错误。)

通常,如果您认为标准错误无用或分散注意力,您可以重定向标准错误以摆脱 stderr 输出。

$ fuser 9092/tcp 2>/dev/null
5920

您可以通过管道轻松地为自己建立它,例如至 nl

$ fuser 9092/tcp | nl
9092/tcp: 
1       5920

请注意 9092/tcp: 输出如何没有获得行号——它没有被传送到 nl

因此您的实际代码可能如下所示

ls -l /proc/$(fuser 9092/tcp 2>/dev/null)/exe

(虽然通常 don't use ls in scripts.