你能在程序中省略 netstat 调用的初始消息吗
Can you omit initial message on netstat call in program
在调用 system("netstat -ltnp -a | grep ./server");
时是否可以省略前两行?
我不希望我的程序读取“(并非所有进程都可以被识别,非拥有的进程信息
不会显示,您必须是 root 才能看到所有内容。)"
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:8091 0.0.0.0:* LISTEN 109392/./server
tcp 0 0 127.0.0.1:8101 127.0.0.1:57114 ESTABLISHED 108863/./server
tcp 0 0 127.0.0.1:41238 127.0.0.1:8091 ESTABLISHED 109397/./client
tcp 0 0 127.0.0.1:8091 127.0.0.1:41238 ESTABLISHED 109392/./server
tcp 0 0 127.0.0.1:57114 127.0.0.1:8101 ESTABLISHED 108865/./client
简单的解决方案是将 grep
替换为例如sed
或者 Awk,它很容易让你添加这样的约束。
system("netstat -ltnp -a | sed -e '1,2d' -e '\%./server%'");
(正确来说,点也应该反斜杠。)
对于任何更复杂的事情,或许可以为 netstat
输出创建一个解析器(and/or 看看你是否可以让它以 well-defined machine-readable 格式发出结果).
不过,您确定此警告消息打印在标准输出上吗?任何 well-behaved Unix 实用程序都应该将诊断消息发送到标准错误,而不是标准输出。简单的解决方案是将标准错误重定向到 /dev/null
.
在调用 system("netstat -ltnp -a | grep ./server");
时是否可以省略前两行?
我不希望我的程序读取“(并非所有进程都可以被识别,非拥有的进程信息 不会显示,您必须是 root 才能看到所有内容。)"
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:8091 0.0.0.0:* LISTEN 109392/./server
tcp 0 0 127.0.0.1:8101 127.0.0.1:57114 ESTABLISHED 108863/./server
tcp 0 0 127.0.0.1:41238 127.0.0.1:8091 ESTABLISHED 109397/./client
tcp 0 0 127.0.0.1:8091 127.0.0.1:41238 ESTABLISHED 109392/./server
tcp 0 0 127.0.0.1:57114 127.0.0.1:8101 ESTABLISHED 108865/./client
简单的解决方案是将 grep
替换为例如sed
或者 Awk,它很容易让你添加这样的约束。
system("netstat -ltnp -a | sed -e '1,2d' -e '\%./server%'");
(正确来说,点也应该反斜杠。)
对于任何更复杂的事情,或许可以为 netstat
输出创建一个解析器(and/or 看看你是否可以让它以 well-defined machine-readable 格式发出结果).
不过,您确定此警告消息打印在标准输出上吗?任何 well-behaved Unix 实用程序都应该将诊断消息发送到标准错误,而不是标准输出。简单的解决方案是将标准错误重定向到 /dev/null
.