ss 終了コードは常に 0 です。

ss 終了コードは常に 0 です。

プロセスがポートでリッスンしていることを確認するためにスクリプトでチェックを実行しようとしています。

を使ってみましたが、ss式が一致しなくても常に終了コードでゼロを生成するようです。

このホストには、一致し、終了コード0を持つポート53でリッスンするサービスがあります。

$ ss -ntl   sport = :53 ; echo $? 
State       Recv-Q Send-Q                                                            Local Address:Port                                                                           Peer Address:Port              
LISTEN      0      5                                                                     127.0.1.1:53                                                                                        *:*                  
LISTEN      0      5                                                                     127.0.0.1:53                                                                                        *:*                  
LISTEN      0      5                                                                           ::1:53                                                                                       :::*                  
0

ポートを54に変更すると(何も聞かずに)、終了コードは常に0のままになります。

$ss -ntl   sport = :54 ; echo $? 
State       Recv-Q Send-Q                                                            Local Address:Port                                                                           Peer Address:Port              
0

マニュアルを確認しましたが、終了コードに関する内容はありません。

私が何か間違っているのか、それともこの動作が正しいのでしょうか?

Ubuntu 16.04とCentos 7でテストされました。

答え1

この動作は通常の動作であり、ssフィルタが一致するかどうかを示すために終了コードを変更しません。

結果をテストするには、ss他のツールを使用して後処理する必要があります。例えば grep(一致によって終了コードが変わります):

ss -ntl sport = :53 | grep -q :53; echo $?

関連情報