특정 프로세스 떠있는지 확인하는 간단한 shell script

2023. 10. 20. 14:25시스템 공부합시다

shell script를 보기 전, ps 명령어를 같이 보자.

테스트 환경 : window 10 in wsl ubuntu 22.04 lts

man -k ps 를 쳐서 정보를 보자.

ps (1)               - report a snapshot of the current processes.

현재 프로세스의 스냅샷을 보고합니다.

리눅스 명령어 상에서도 볼수 있듯, ps명령어는 프로세스의 약자로 확인이 된다.

그러면 ps 명령어를 쓸때 가장 많이 쓰는 옵션들은 뭐가 있을까?
내가 자주 사용하는 옵션들을 위주로 기록을 해보자

ps -ef 

ps -auxf 

저 옵션들을 하나씩 info ps 해서 하나씩 뜯어 보도록 하자

 -e     Select all processes.  Identical to -A.
        모든 프로세스를 선택합니다. -A와 동일 합니다. 
        
 -a     Select all processes except both session leaders (see getsid(2)) and processes not associated with a terminal.
   터미널에 종속 되어 있지 않은 모든 프로세스를 출력 합니다. 
 
 
 -f     Do full-format listing.  This option can be combined with many other UNIX-style options to add additional columns.  It also causes the command arguments to be printed.  When
              used with -L, the NLWP (number of threads) and LWP (thread ID) columns will be added.  See the c option, the format keyword args, and the format keyword comm.
 풀 포멧으로 리스팅해서 보여 줍니다. 
 유닉스 스티일로 출력되는 옵션으로  UID,PID 등을 함께 표협 합니다. 
 
 -u userlist
              Select by effective user ID (EUID) or name.  This selects the processes whose effective user name or ID is in userlist.
특정 사용자의 프로세스 정보를 확인할때 사용 합니다. 



 x      Lift the BSD-style "must have a tty" restriction, which is imposed upon the set of all processes when some BSD-style (without "-") options are used or when the ps personality
              setting is BSD-like.  The set of processes selected in this manner is in addition to the set of processes selected by other means.  An alternate description is that this
              option causes ps to list all processes owned by you (same EUID as ps), or to list all processes when used together with the a option.
              
터미널에 종속되지 않은 프로세스를 출력 합니다. 
보통 a옵션과 결합하여 프로세스를 출력할때 사용 합니다. 

-x	로그인 상태에 있는 동안 아직 완료되지 않은 프로세서들을 보여준다. 
유닉스 시스템은 사용자가 로그아웃 한 후에도 임의의 프로세서가 게속 동작하게 할 수 있다. 
그러면 그 프로세서는 자신을 실행시킨 셸이 없이도 계속 자신의 일을 수행하는데 이러한 프로세스는 일반적인 ps 명령으로 확인할 수 잆다.
이 때 -x 옵션을 사용하면 자신의 터미널이 없는 프로세서들을 확인할 수 있다.  

특정 프로세스를 확인 하는데, 주로 grep 명령어랑 같이 사용을 한다.

주로 사용하는 명령어는
ps -ef | grep '프로세스명'
ps -aux | grep '프로세스명'

ps 명령어만 단독으로 사용 했을때 결과값을 먼저 봐보자

sarang@DESKTOP-DVTJHH6:~$ ps
  PID TTY          TIME CMD
  180 tty3     00:00:00 bash
  355 tty3     00:00:00 ps

PID, TTY, TIME, CMD 4개의 정보가 보인다.
PID : 프로세스 번호
TTY : 프로세스가 연결된 터미널
TIME : 총 CPU 사용 시간
CMD : 프로세스의 실행 명령어

위에 내가 자주 사용하는 ps 명령어를 사용해 보자

sarang@DESKTOP-DVTJHH6:~$ ps -ef | grep http
sarang     368   180  0 11:12 tty3     00:00:00 grep --color=auto http

나중에 ps를 각잡고 다른 포스팅으로 정리를 해보자.

httpd 의 프로세스가 없지만 grep 으로 구분한 저 프로세스 리스트가 보인다 .

저 환경에서 httpd 프로세스가 깔려 있는지 확인하는 shell script를 작성 하면 어떻게 될까?

'Test Case01'

#!/bin/bash
TEST01=`ps -ef | grep process `

if [[ $TEST01 ]]; then
  echo "success process"
else
  echo "fail process"
fi

저 간단한 shell script 를 돌려 보았을때 결과값은 success일까? fail일까?

결과는 success이다. 왜 process라는 값이 없는데 왜 success일까?
바로 | grep process 때문이다.
ps -ef | grep process 의 값을 일반 터미널에서 볼려보자.

sarang@DESKTOP-DVTJHH6:~$ ps -ef | grep process
sarang     603   398  0 14:48 tty3     00:00:00 grep --color=auto process

결과값이 나온다. grep값을 포함한 결과값이 나오기 때문에 위 shell script에서 true 값이 나온다.

그러면 내가 원하던 값이 false가 나오는것을 어떻게 해야 할까?

sarang@DESKTOP-DVTJHH6:~$ ps -ef | grep process
sarang     603   398  0 14:48 tty3     00:00:00 grep --color=auto process

위 결과값을 보면 "grep" 의 값이 포함 되어 있다.
그럼 저 grep 을 빼고 값을 돌려보면 어떻게 결과값이 나올까?

테스트 스크립트 :

#!/bin/bash
TEST01=`ps -ef | grep process | grep -v 'grep'`

if [[ $TEST01 ]]; then
  echo "success process"
else
  echo "fail process"
fi

sarang@DESKTOP-DVTJHH6:~$ ./test.sh
fail process

결과값을 원하는데로 fail

프로세스에 대해서 간단하게라도 알아본 시간이였다.
다음에 시간 나면 ps에 대해 각잡고 파보는 시간을 가져야 겠다.

'시스템 공부합시다' 카테고리의 다른 글

openssl 사용방법 이야기  (2) 2023.10.19