리눅스프로그래밍

우분투 리눅스 - 포그라운드, 백그라운드 프로세스와 작업 제어

헬로월드! 2020. 5. 23. 16:45

1. 포그라운드 작업

포그라운드 프로세스 : 사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다려야 하는 포그라운드 방식으로 처리되는 프로세스 

ex.  sleep 100

sleep 프로세스가 실행되고 100초간 기다린다.

 

2. 백그라운드 작업

백그라운드 프로세스: 명령을 실행하면 명령의 처리가 끝나는 것과 관계 없이 곧바로 프롬프트가 출력되어 사용자가 다른 작업을 계속할 수 있음 

ex. sleep 100 &

백그라운드 작업과 출력 방향 전환하기: 백그라운드로 처리할 때는 주로 출력과 오류 방향을 전환하여 실행 결과와 오류 메시지를 파일로 저장한다.

 find / -name passwd > pw.dat 2>&1 & 

pw.dat 에 결과와 오류를 저장하는 명령이다. 하면 결과로 예를 들어 이런 결과 값이 나온다고 하자, [1] 32224 그럼 여기서 [1] 은 작업 번호를 나타낸다!!

 

3. 작업 제어

작업 제어는 작업 전환작업 일시 중시, 작업 종료를 의미한다. 

작업 전환은 포그라운드 작업에서 백그라운드 작업으로 또는 백그라운드 작업에서 포그라운드 작업으로 전환하는 것이다.

작업 일시 중지는 작업을 잠시 중단하는 것이다. 작업 종료는 프로세스를 종료하는 것처럼 작업을 종료한다.

 

jobs (작업 목록 보기)

-기능 : 백그라운드 작업을 모두 보여준다. 특정 작업 번호를 지정하면 해당 작업의 정보만 보여준다.

-형식: jobs [%작업번호]

- % 작업 번호 - %번호 : 해당 번호의 작업 정보를 출력한다.

                       - %+ 또는 %% : 작업 순서가 + 인 작업 정보를 출력한다.

                       - %- : 작업 순서가 -인 작업 정보를 출력한다.

 

job 명령의 출력 정보

항목 출력 예 의미
작업번호 [1] 작업 번로서 백그라운드로 실행할 때마다 순차적으로 증가한다. [1], [2],[3]....
작업순서 + 작업 순서 표시
+ : 가장 최근에 접근한 작업
- : +작업보다 바로 전에 접근한 작업
공백: 그 외의 작업
상태 실행중 작업 상태 표시
실행중, 완료,종료됨, 정지됨
명령 sleep 100 & 백그라운드로 실행중인 명령

작업 전환하기

명령 기능
ctrl +z 또는 stop %작업번호 포그라운드 작업을 정지한다. (종료 X 잠시 중단)
bg [%작업 번호] 작업 번호가 지시하는 작업을 백그라운드 작업으로 전환
fg[%작업 번호] 작업 번호가 지시하는 작업을 포그라운드 작업으로 전환

ex) 백그라운드 -> 포그라운드

jobs 

fg

 

작업 종료하기

포그라운드 작업 : Ctrl + c

백그라운드 작업 : kill 명령으로 강제 종료, PID 또는 '%작업 번호'

 

nohup

- 기능: 로그아웃한 후에도 백그라운드 작업을 계속 실행한다.

- 형식: nohup 명령&

ex. nohup find / -name passwd & 

하고 exit 로그아웃

그 후 , 다시 로그인하여 파일 내용을 확인해보면 있음 ! more nohup.out 이용

 

명령 실행 시 다음 예와 같이 출력 방향을 전환면 nohup.out 파일을 생성하지 않고 지정한 파일에 결과, 오류 메시지를 출력

nohup find / -name passwd>pw.dot 2>&1

다시 로그인하여 파일의 내용을 확인해보면 있음을 알 수 있다. 

 

4. 작업 예약

-특정한 시간에 작업을 수행하도록 예약할 수 있는 두가지 방법

1) 정해진 시간에 한 번만 수행 (at 이용)

2) 정해진 시간에 반복 수행 (crontab 이용)

 

at 

- 기능 : 예약한 명령을 정해진 시간에 실행한다. 

- 형식: at [옵션] 시간

- 옵션: -l ) 현재 실행 대기 중인 명령의 전체 목록을 출력한다. (atq 명령과 동일)

            -r 작업번호) 현재 실행 대기 중인 명령 중 해당 작업 번호를 삭제한다. ( atrm과 동일)

            -m ) 출력 결가 없더라도 작업이 완료되면 사용자에게 메일로 알려준다.

            -f 파일 ) 표준 입력 대신 실행할 명령을 파일로 지정한다. 

 

at 을 설치하기 위해서는 root 권한으로 실행해야한다.!

이때 root 권한을 나타내는건 sudo 이다. 

sudo apt-get install at

명령 입력! 

 

at 명령 설정하기

at 05:00pm 

라고 입력하면 오후 5시에 할 명령! 

at 로 실행할 명령은 기본적으로 표준 입력으로 지정한다. 명령의 입력을 마치려면 ctrl+d 를 입력한다. 

at 작업 파일은 daemon 그룹의 사용자만 /var/spool/cron/atjobs 디렉터리 내용확인이 가능한다. 

 

at 작업 목록 확인하기 -l 옵션 , atq

at -l 

atq

 

at 작업 삭제하기 : -d 옵션 , atrm

at -d 2

-d 옵션을 사용하고 삭제할 작업 번호를 지정한다. 

atrm 3 

 

at 명령 사용 제한하기

관련된 파일은 /etc/at.allow , /etc/at.deny 가 있다.

/etc/at.allow 파일과 /etc/at.deny 파일에는 한 줄에 사용자 이름을 하나씩만 기록한다.

/etc/at.allow 파일이 있으면 이 파일에 있는 사용자만 at 명령을 사용할 수 있다. 이경우 , /etc/at.deny 파일은 무시된다.

/etc/at.allow 파일이 없으면 /etc/at.deny 파일에 지정된 사용자를 제외한 모든 사용자가 at 명령을 사용할 수 있다.

만약 두 파일이 모두 없다면? root 명령으로만 at 명령을 사용할 수 있다. 

한 사용자가 두 파일에 모두 속해 있다면 그 사용자는 at 명령을 사용할 수 있다. /etc/at.allow 파일이 적용되기 때문이다.

 

crontab

(정해진 시간에 반복 실행) 

- 기능: 사용자의 crontab 파일을 관리한다.

- 형식: crontab [ -u 사용자 ID ]  [옵션] [ 파일]

- 옵션: -e ) 사용자의 crontab 파일을 편집한다.

            -l ) crontab 파일의 목록 출력한다.

            -r ) crontab 파일을 삭제한다.

 

crontab 파일 형식

요일 작업내용

30 23 1 * * bin/ls -l ~user1 > ~user1/cron.out