python에서 리눅스 shell command를 이용하여 특정 프로그램의 실행 여부 파악하기


리눅스에서 특정 프로그램의 실행 여부를 파악할 때 터미널 창에서 ps 명령어를 이용해서 대개는 확인하게 된다. SocServer라는 이름을 가진 프로그램이 현재 실행중인지 파악할려면 아래와 같이 한다.


ps -elf | grep SocServer*


이렇게 되면 다음과 같은 정보가 보인다면 해당 프로그램은 실행 중이라는 뜻이다.


0 S root     14851  1812  0  80   0 -  8931 inet_c 16:53 pts/18   00:00:00 python /home/joe/PyCharmProj/SocServer.py


여기서 4번째 column의 값 14851이 SocServer.py의 실행 process id이다. 즉 특정 프로그램의 process가 존재하는지를 통해서 해당 프로그램의 실행 여부를 파악할수 있는 것이다.


이 프로그램의 실행을 강제 종료 시킬려면 다음과 같이 하게 될 것이다.


kill -9 14851


위의 기능과 같은 기능을 하되 보다 단순한 정보를 보여주는 shell command가 있는데 pgrep이다.


pgrep -lf SocServer*


를 하면 다음과 같은 보다 간단한 정보를 나타내준다. 


14851 python


이렇게 간단한 정보를 활용하면 파이썬 상에서 코딩하기가 보다 수월해 진다.

아래는 파이썬에서의 특정 프로그램 실행 여부를 확인하는 코드이다.

이를 위해서는 os와 subprocess 파이썬 모듈을 import 시켜야 한다.



import os

import subprocess


# 이미 실행 중인 process가 있으면 다시 실행되지 않도록 하기 위해

# 실행되는 process가 없으면 0을 반환, 있으면 1을 반환

socSrvProc = subprocess.check_output("pgrep -lf SocServer* | wc -l", shell=True)

print 'socSrvProc : ', socSrvProc


if int(socSrvProc) == 0 :  # SocServer.py가 기존 돌아가고 있는 것이 없으면

    # PC의 C# .DLL library와 소켓 통신을 위한 별도의 프로그램.

    # SocServer.py가 서버 역할 C# .DLL library가 client 역할

    os.system("python /home/joe/PyCharmProj/SocServer.py &")


    print 'SocServer.py를 실행했습니다. 서버 소켓 준비됨'

else :

    print 'SocServer는 이미 실행 중입니다.'



+ Recent posts