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는 이미 실행 중입니다.'
'Python' 카테고리의 다른 글
유니코드를 한글로 변환하기 (0) | 2019.04.11 |
---|---|
python에서 리눅스 쉘 명령어(shell command)를 이용하여 자기 IP 알아내기 (0) | 2018.02.06 |
python Tkinter GUI 프로그램에서 lambda를 이용한 버튼 이벤트 처리 (0) | 2018.02.05 |
python의 soocket 통신시 send()와 sendall()의 차이에 대해서 (0) | 2018.01.05 |
python에서의 문자열 비교 (0) | 2017.12.14 |