Bash
채용 정보 및 프로세스
수색…
현재 작업 나열
$ 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 등)이 닫히면 장시간 실행되는 프로세스를 계속할 수 있습니다.