LINUX

ubuntu 프로세스 실습

25G 2023. 2. 12. 23:11

systemctl

systemctl이라는 서비스 제어 명령어가 있습니다.

service라는 명령어도 있지만 service명령어는 systemctl의 wrapper script입니다. 그렇기 때문에 systemctl이 권장되는 것 같습니다.

다음명령어로 system에 등록된 서비스 목록을 전부 볼 수 있다.

 sudo systemctl list-unit-files | grep <service Name>

위 명령어로 서비스 목록을 보고 사용하려는 프로그램이 현제 사용중인지 아닌지도 체크할 수 있습니다.

프로세스 실행 명령어

systemctl start <service name>

ps

ps -ef 명령어를 통해 실행중인 프로세스에 대해서 다 볼 수 있습니다.

프로세스 종료 명령어

  • kill -l
    위 명령어로 종료방법에 대한 리스트를 볼 수 있다.

kill -l

위 리스트 중에 sigterm을 통해서 안전하게 종료할 수 있다.

ps -ef 로 kill하려는 프로세스를 찾은후 다음 명령어로 프로세스를 종료한다.

 sudo kill <pid>

위 명령어를 사용한후 systemctl로 해당 프로세스를 검색해보면
systemctl status <종료한프로세스명>
systemctl의 상태는 exit 상태로 돼 있는데 이 말은 즉 systemctl을 통해서 종료한것이 아니라 systemctl입장에서는 종료된지 모르는 것이기때문에 다시 해당 서비스를 실행시키 위해서는 다음 명령어로 실행시켜 줍니다.

systemctl restart <서비스명>

왜 systemctl로 하지 않을까?
systemctl로 종료되지 않을때가 있을때 강제종료를 하거나 서비스로 등록이 안돼 있는 프로세스가 있을 수 있다. 예를 들어 직접 압축파일을 다운받아서 압축을 풀고 실행했을때라던지 하는 경우이다.

shell script 사용시 pid가 필요한 경우가 생길 수 있다.

ps ef 활용

ps -ef

ps -ef | grep tomcat8 | grep -v(제외명령) grep | awk(공백을 기점으로 배열에 토크나이징해준다.) '{print $2}'

첫번째 파이프라인 : 프로세스 목록 가져오기

두번째 파이프라인 : tomcat8만 그랩하기

세번째 파이프라인: 결과에서 필요없는부분 제외하기

네번째 파이프라인: 위 사진에서 공백을 기준으로 파싱해서 배열에 넣어준다. 위 예에서는 다음과 같이 변환됩니다.

[tomcat8, 3335, 1 , 1, 13:39, ? .....]

이렇게 위 명령어에서 pid tomcat8의 pid를 가져 올수 잇는데 이때 백틱은 치환명령어로 감싼 부분을 실행결과로 변환해 주는데 이를 활용할 수 있다.

kill `ps -ef | grep tomcat8 | grep -v grep | awk '{print $2}'`

위와같이 script를 짤때 pid를 파싱해서 가져 와서 활용할 수 있다.