ss 종료 코드는 항상 0입니다.

ss 종료 코드는 항상 0입니다.

프로세스가 포트에서 수신 대기 중인지 확인하기 위해 스크립트에서 검사를 수행하려고 합니다.

를 사용해 보았지만 ss표현식이 일치하지 않더라도 항상 종료 코드로 0을 생성하는 것 같습니다.

이 호스트에는 일치하고 종료 코드 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

매뉴얼을 확인했는데 종료 코드에 관한 내용이 없습니다.

내가 뭔가 잘못하고 있는 걸까요, 아니면 이 동작이 맞는 걸까요?

우분투 16.04 및 Centos 7에서 테스트되었습니다.

답변1

이 동작은 정상적인 동작이며 ss필터가 일치하는지 여부를 나타내기 위해 종료 코드를 변경하지 않습니다.

결과를 테스트하려면 ss다른 도구를 사용하여 후처리해야 합니다.예를 들어 grep(일치에 따라 종료 코드가 변경됩니다):

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

관련 정보