오픈소스 애플리케이션을 linux에서 돌려보고 있는데 해당 명령어가 눈에 띄었다.
jobs
node ./Server/lib/Game/cluster.js 0 1
bg
disown -h
node Server/lib/Web/cluster.js 1
bg
disown -h
netstat -anlp | grep
netstat -anlp | grep
web과 game 서버로 나뉘어져 있는데 이를 linux 단일 서버에서 실행시키려 진행한 것이다.
위 명령은 해당 프로세스를 백그라운드로 진행시키는 명령어이다.
“&”를 이용한 백그라운드 실행은 익숙하지만 bg, fg, jobs 등 명령어는 익숙치 않은것 같아,
프로세스를 백그라운드로 관리하는 명령어들에 대해 상세히 알아보고 실습해보는 시간을 가져보도록 하겠다.
Background? Foreground?
백 그라운드(Background)란 보이지 않게 실행되는 상태의 프로세스를 말한다.
(deamon도 백그라운드 프로세스의 일종이다.)
반대로 포그라운드(Foreground)는 현재 터미널에서 실행되고 있는 상태이다.
모든 프로세스는 백그라운드, 포그라운드 두 가지 중 하나의 모드로 작동하며,
보통 일반적으로 실행되는 명령어는 포그라운드로 실행된다.
하지만 명령어 뒤에 ‘&’를 붙이게 될 경우와 몇몇 프로세스는 자동으로 백그라운드로 실행되기도 한다.
그리고 bg 명령어와 fg, jobs 명령어는 프로세스들의 백그라운드, 포그라운드 작업에 관한 설정을 확인하는 명령어이다.
Jobs 명령
Jobs명령어를 사용하면 자기자신이 실행시킨 프로세스리스트와 프로세스앞에 순서를 함께 출력한다.
이 순서 번호를 이용하여 프로세스를 백그라운드나 포그라운드로 전환이 가능하기때문에
bg명령어나 fg명령어를 사용할때 jobs명령어를 같이 사용하는 경우가 많다.
백그라운드로 명령실행(&)
root@cwpack:~# tail -f /var/log/zabbix-agent/zabbix_agentd.log &
[1] 871589
root@cwpack:~# 151794:20230723:000012.228 TLS support: YES
151794:20230723:000012.228 **************************
151794:20230723:000012.228 using configuration file: /etc/zabbix/zabbix_agentd.conf
151794:20230723:000012.228 agent #0 started [main process]
151797:20230723:000012.229 agent #1 started [collector]
151798:20230723:000012.229 agent #2 started [listener #1]
151799:20230723:000012.230 agent #3 started [listener #2]
151800:20230723:000012.230 agent #4 started [listener #3]
151801:20230723:000012.230 agent #5 started [active checks #1]
151801:20230723:000015.230 active check configuration update from [172.16.0.247:11151] started to fail (cannot connect to [[172.16.0.247]:11151]: [4] Interrupted system call)
root@cwpack:~# ps -ef | grep tail
root 871589 867287 0 17:30 pts/0 00:00:00 tail -f /var/log/zabbix-agent/zabbix_agentd.log
root 871664 867287 0 17:30 pts/0 00:00:00 grep --color=auto tail
root@cwpack:~# jobs
[1]+ Running tail -f /var/log/zabbix-agent/zabbix_agentd.log &
백그라운드로 명령어를 실행하고자 할 때는 & 문자를 명령어 뒤에 붙여주면 된다.
백그라운드로 실행중인 프로세스를 포그라운드로 전환(fg)
root@cwpack:~# jobs
[1]+ Running tail -f /var/log/zabbix-agent/zabbix_agentd.log &
root@cwpack:~# fg %1
tail -f /var/log/zabbix-agent/zabbix_agentd.log
(tail -f 명령을 이용하면 해당 파일에 대해 지속적인 모니터링이 가능하다.)
백그라운드로 동작하는 tail 명령을 jobs 명렁어로 상태 확인 후 fg 명령으로 포그라운드로 전환하였다.
포그라운드로 실행중인 프로세스를 백그라운드로 전환(bg)
root@cwpack:~# tail -f /var/log/zabbix-agent/zabbix_agentd.log
151794:20230723:000012.228 TLS support: YES
151794:20230723:000012.228 **************************
151794:20230723:000012.228 using configuration file: /etc/zabbix/zabbix_agentd.conf
151794:20230723:000012.228 agent #0 started [main process]
151797:20230723:000012.229 agent #1 started [collector]
151798:20230723:000012.229 agent #2 started [listener #1]
151799:20230723:000012.230 agent #3 started [listener #2]
151800:20230723:000012.230 agent #4 started [listener #3]
151801:20230723:000012.230 agent #5 started [active checks #1]
151801:20230723:000015.230 active check configuration update from [172.16.0.247:10051] started to fail (cannot connect to [[172.16.0.247]:10051]: [4] Interrupted system call)
^Z
[1]+ Stopped tail -f /var/log/zabbix-agent/zabbix_agentd.log
root@cwpack:~# jobs
[1]+ Stopped tail -f /var/log/zabbix-agent/zabbix_agentd.log
root@cwpack:~# bg %1
[1]+ tail -f /var/log/zabbix-agent/zabbix_agentd.log &
root@cwpack:~# ps -ef | grep tail
root 873681 867287 0 17:36 pts/0 00:00:00 tail -f /var/log/zabbix-agent/zabbix_agentd.log
root 873759 867287 0 17:37 pts/0 00:00:00 grep --color=auto tail
Ctrl + C 를 진행하면 명령어가 종료된다. Ctrl + C가 아닌 Ctrl + Z를 사용하면 프로세스가 멈추게 되는데,
이렇게 프로세스가 멈춘 상태에서 jobs를 이용해 앞 번호를 확인 후 bg 명령어 %[번호]
를 진행하여
백그라운드로 전환이 가능하다.
실행시킨 프로세스 확인(jobs)
jobs 명령은 로그인 이후 사용자가 실행한 프로세스에 대해 확인하는 명령어이다.
(즉, 재 로그인을 하거나 다른 사용자로 접속하면 기존에 진행한 내역은 확인할 수 없다.)
jobs 명령어를 이용하여 프로세스를 확인 후 bg 및 fg 명령을 주로 사용한다.
root@cwpack:~# jobs
[1] Running tail -f /var/log/zabbix-agent/zabbix_agentd.log &
[2]- Running tail -f /var/log/tomcat9/catalina.out &
[3]+ Stopped tail -f /var/log/syslog
위 처럼 내가 실행한 프로세스에 대해 확인할 수 있다.
root@cwpack:~# jobs
[1] Running tail -f /var/log/zabbix-agent/zabbix_agentd.log &
[2]- Running tail -f /var/log/tomcat9/catalina.out &
[3]+ Stopped tail -f /var/log/syslog
root@cwpack:~# su - woo
woo@cwpack:~$ jobs
woo@cwpack:~$ su - root
Password:
root@cwpack:~# jobs
root@cwpack:~#
root@cwpack:~# ps -ef | grep tail
root 873681 867287 0 17:36 pts/0 00:00:00 tail -f /var/log/zabbix-agent/zabbix_agentd.log
root 875037 867287 0 17:41 pts/0 00:00:00 tail -f /var/log/tomcat9/catalina.out
root 875124 867287 0 17:41 pts/0 00:00:00 tail -f /var/log/syslog
root 875733 875500 0 17:43 pts/0 00:00:00 grep --color=auto tail
다른 사용자나 재 로그인시 프로세스는 동작하고 있으나, jobs 명령어로 확인하지 못한다.
+추가! (disown, nohup)
disown은 shell의 job 리스트에서 job을 삭제한다.
nohup은 터미널에서 프로세스를 효율적으로 분리하는데,
이 둘에 대해서는 다음 글에서 상세히 다뤄보겠다.
'DevOps > Linux_리눅스' 카테고리의 다른 글
[Linux] dhcpd not authoritative 문제 해결 (0) | 2024.06.13 |
---|---|
[Linux] root 권한 관리 (UID 탐색) (0) | 2023.05.08 |
[Linux] default 계정 삭제 (default 계정 탐색) (0) | 2023.05.02 |
[Linux] 시스템 재부팅시 자동실행되는 shell script (0) | 2023.05.02 |
[Linux] Shell Prompt 정보 변경 (1) | 2023.05.01 |