수색…


현재 작업 나열

$ tail -f /var/log/syslog > log.txt
[1]+  Stopped                 tail -f /var/log/syslog > log.txt

$ sleep 10 &

$ jobs
[1]+  Stopped                 tail -f /var/log/syslog > log.txt
[2]-  Running                 sleep 10 &

작업 처리

작업 만들기

단지 하나의 추가, 작업을 만들려면 & 명령 한 후 :

$ sleep 10 &
[1] 20024

Ctrl + z 를 눌러 실행중인 프로세스를 작업으로 만들 수도 있습니다.

$ sleep 10
^Z
[1]+  Stopped                 sleep 10

백그라운드 및 전경 프로세스

프로세스를 포 그라운드로 가져 오려면 명령 fg%

$ sleep 10 &
[1] 20024

$ fg %1
sleep 10

이제 프로세스와 상호 작용할 수 있습니다. 백그라운드로 되돌리려면 bg 명령을 사용할 수 있습니다. 점유 된 터미널 세션 때문에 Ctrl + z 를 눌러 프로세스를 먼저 중지해야합니다.

$ sleep 10
^Z
[1]+  Stopped              sleep 10

$ bg %1
[1]+ sleep 10 &

일부 프로그래머의 게으름으로 인해 이러한 모든 명령은 프로세스가 하나만있는 경우 또는 목록의 첫 번째 프로세스에 대해 단일 % 작동합니다. 예 :

$ sleep 10 &
[1] 20024

$ fg %        # to bring a process to foreground 'fg %' is also working.
sleep 10

또는 단지

$ %           # laziness knows no boundaries, '%' is also working.
sleep 10

또한 인수없이 fg 또는 bg 를 입력하면 마지막 작업이 처리됩니다.

$ sleep 20 &
$ sleep 10 &
$ fg
sleep 10
^C
$ fg
sleep 20

살해 작업

$ sleep 10 &
[1] 20024

$ kill %1
[1]+  Terminated              sleep 10

휴면 프로세스는 백그라운드에서 프로세스 id (pid) 20024 및 작업 번호 1 됩니다. 프로세스를 참조하기 위해 pid 또는 작업 번호를 사용할 수 있습니다. 작업 번호를 사용하는 경우, 접두어 앞에 % 붙이십시오. 에 의해 전송 된 기본 죽일 신호 kill 입니다 SIGTERM 대상 프로세스가 정상적으로 종료 할 수 있습니다.

몇 가지 일반적인 kill 신호가 아래에 나와 있습니다. 전체 목록을 보려면 kill -l 실행하십시오.

신호명 신호 값 효과
SIGHUP 1 전화 끊기
SIGINT 2 키보드에서 인터럽트
SIGKILL 9 신호를 죽인다.
SIGTERM 15 종단 신호

특정 프로세스 시작 및 종료

아마도 실행중인 프로세스를 죽이는 가장 쉬운 방법은 다음 예제에서와 같이 pkill 명령을 사용하여 프로세스 이름을 통해 선택하는 것입니다.

pkill -f test.py

(또는) pgrep 을 사용하여 실제 process-id를 찾는 더 바보 같은 방법

kill $(pgrep -f 'python test.py')

grep over ps -ef | grep name_of_process grep 를 사용하여 동일한 결과를 얻을 수 있습니다. ps -ef | grep name_of_process 그런 다음 결과 pid (프로세스 ID)와 연관된 프로세스를 종료합니다. 테스트 환경에서는 이름을 사용하여 프로세스를 선택하는 것이 편리하지만 스크립트가 프로덕션 환경에서 사용될 때 정말 위험 할 수 있습니다. 이름이 실제로 죽이기를 원하는 프로세스와 일치하는지 실제로 확인하는 것은 불가능합니다. 이 경우 다음과 같은 접근 방식이 실제로 훨씬 안전합니다.

결국 다음과 같은 방법으로 스크립트를 시작하십시오. 실행하고 python test.py 는 명령이 python test.py 라고 가정 해 봅시다.

#!/bin/bash

if [[ ! -e /tmp/test.py.pid ]]; then   # Check if the file already exists
    python test.py &                   #+and if so do not run another process.
    echo $! > /tmp/test.py.pid
else
    echo -n "ERROR: The process is already running with pid "
    cat /tmp/test.py.pid
    echo
fi

이렇게하면 /tmp 디렉토리에 python test.py 프로세스의 pid를 포함하는 파일이 생성됩니다. 파일이 이미 있으면 명령이 이미 실행 중이며 스크립트가 오류를 반환한다고 가정합니다.

그런 다음, 다음 스크립트를 사용하여 죽이고 싶을 때 :

#!/bin/bash

if [[ -e /tmp/test.py.pid ]]; then   # If the file do not exists, then the
    kill `cat /tmp/test.py.pid`      #+the process is not running. Useless
    rm /tmp/test.py.pid              #+trying to kill it.
else
    echo "test.py is not running"
fi

휘발성 정보 (명령을 실행하는 데 사용 된 문자열과 같은)에 의존하지 않고 명령과 관련된 프로세스를 정확하게 종료합니다. 이 경우에도 파일이 없으면 스크립트는 실행되지 않는 프로세스를 중지하려고한다고 가정합니다.

이 마지막 예제는 동일한 명령을 여러 번 실행 (예 : 덮어 쓰지 않고 pid 파일에 추가)하고 죽이기 전에 프로세스가 종료되는 경우를 관리하기 위해 쉽게 향상시킬 수 있습니다.

모든 프로세스 나열

시스템의 모든 프로세스를 나열하는 두 가지 일반적인 방법이 있습니다. 둘 다 모든 사용자가 실행중인 모든 프로세스를 나열하지만 출력 형식이 다릅니다 (차이점이 기록 된 이유).

ps -ef   # lists all processes 
ps aux   # lists all processes in alternative format (BSD)

이것은 주어진 응용 프로그램이 실행 중인지 확인하는 데 사용할 수 있습니다. 예를 들어 SSH 서버 (sshd)가 실행 중인지 확인하려면 다음을 입력하십시오.

ps -ef | grep sshd

특정 포트에서 실행중인 프로세스 확인

포트 8080에서 실행중인 프로세스를 확인하려면

lsof -i :8080

실행중인 프로세스에 대한 정보 찾기

ps aux | grep <search-term>검색어와 일치하는 프로세스를 보여줍니다.

예:

root@server7:~# ps aux | grep nginx
root       315  0.0  0.3 144392  1020 ?        Ss   May28   0:00 nginx: master process /usr/sbin/nginx
www-data  5647  0.0  1.1 145124  3048 ?        S    Jul18   2:53 nginx: worker process
www-data  5648  0.0  0.1 144392   376 ?        S    Jul18   0:00 nginx: cache manager process
root     13134  0.0  0.3   4960   920 pts/0    S+   14:33   0:00 grep --color=auto nginx
root@server7:~#

여기에서 두 번째 열은 프로세스 ID입니다. 예를 들어, nginx 프로세스를 종료하려면 kill 5647 명령 kill 5647 사용할 수 있습니다. kill 명령을 SIGKILL 대신 SIGTERM 과 함께 사용하는 것이 항상 권장됩니다.

배경 직업 무효

$ gzip extremelylargefile.txt &
$ bg
$ disown %1

이렇게하면 쉘 (터미널, ssh 등)이 닫히면 장시간 실행되는 프로세스를 계속할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow