我正在寻找一个单一的衬垫,给定端口号(2550)使用netstat返回的值,它将允许我针对ps -ef运行结果输出以返回所讨论进程的路径。我有:
ps -ef | grep $(netstat -tonp | grep 2550 | awk '{split($7,a,"/"); print a[1]}')
虽然我知道
netstat -tonp | grep 2550 | awk '{split($7,a,"/"); print a[1]}'
返回预期的结果,随后的grep告诉我没有这样的文件或目录(但是,如果我执行ps -ef | grep **),它就可以正常工作……我显然缺少了一些东西。 ..很好,很明显,但是我看不到什么?
答案 0 :(得分:1)
尝试类似的方法(它需要对应的第一个PID /端口,不是全部):
Port=2550;ps -f --pid $( netstat -tonp | awk -F '[ \t/]+' -v Port=$Port '$0 ~ "([0-9]+[.:]){4}" Port { PID= $7;exit}; END { print PID+0 }' ) | sed 's/^\([^ \t]*[ \t]*\)\{7\}//'
最后一个sed假设有ps这样的答复(空格很重要):
usertest 4408 4397 0 09:43 pts/6 00:00:00 ssh -p 22 -X -l usertest 198.198.131.136
对于每个PID且没有结尾sed:
Port=2550; ps -ef | awk -v PIDs="$( netstat -tonp | awk -F '[ \t/]+' -v Port=${Port} '$0 ~ (":" Port) { print $7}' )" 'BEGIN{ split( PIDs, aTemp, /\n/); for( PID in aTemp) aPID[ aTemp[PID] ] }; $2 in aPID { sub( /^([^ \t]*[ \t]*){7}/, ""); print}'
答案 1 :(得分:1)
这将为您提供pids:
<sudo> netstat -tulpen | awk '$4 ~ /:2550$/{sub("/.*","",$NF);print $NF}'
您可以使用xargs
将pid传递给ps
:
netstat -tulpen | awk '$4 ~ /:2550$/{sub("/.*","",$NF);print $NF}' | xargs -P 1 ps -o pid,cmd -p