을 사용하여 백그라운드에서 원격 컴퓨터에서 wget을 시작했습니다 &
. 갑자기 다운로드가 중지됩니다. 프로세스를 종료 한 다음 명령을 다시 실행하고 싶습니다. 어떻게 종료합니까?
쉘 창을 닫지 않았습니다. 그러나 아시다시피 Ctrl+ C및 Ctrl+ 사용은 중단되지 않습니다 Z.
을 사용하여 백그라운드에서 원격 컴퓨터에서 wget을 시작했습니다 &
. 갑자기 다운로드가 중지됩니다. 프로세스를 종료 한 다음 명령을 다시 실행하고 싶습니다. 어떻게 종료합니까?
쉘 창을 닫지 않았습니다. 그러나 아시다시피 Ctrl+ C및 Ctrl+ 사용은 중단되지 않습니다 Z.
답변:
이 문제를 해결하는 방법에는 여러 가지가 있습니다.
ps
명령을 사용 하여이 프로세스의 프로세스 ID를 찾은 다음 PID를 사용하여 프로세스를 종료 할 수 있습니다.
$ ps -eaf | grep [w]get
saml 1713 1709 0 Dec10 pts/0 00:00:00 wget ...
$ kill 1713
을 사용하여 프로세스 ID를 찾을 수도 있습니다 pgrep
.
$ pgrep wget
1234
$ kill 1234
확실하게 wget
실행 한 것이 확실하다면 명령 pkill
을 사용하여 이름으로 작업을 종료 할 수 있습니다 .
$ pkill wget
현재 백그라운드에서 작업을 실행 한 곳과 동일한 쉘에있는 경우 jobs
명령을 사용하여 여전히 실행 중인지 확인 하고 작업 번호로 종료 할 수도 있습니다.
내 가짜 일, sleep
.
$ sleep 100 &
[1] 4542
직업 번호를 찾으십시오. 참고 : 번호 4542는 프로세스 ID입니다.
$ jobs
[1]+ Running sleep 100 &
$ kill %1
[1]+ Terminated sleep 100
fg
명령을 사용하여 백그라운드 작업을 다시 포 그라운드로 가져올 수 있습니다 .
가짜 직업, sleep
.
$ sleep 100 &
[1] 4650
직업 번호를 얻으십시오.
$ jobs
[1]+ Running sleep 100 &
작업 # 1을 다시 포 그라운드로 가져온 다음 Ctrl+ 를 사용하십시오 C.
$ fg 1
sleep 100
^C
$
ps
. 세 번째 #은 부모의 프로세스 ID입니다.
ps -eaef| grep [w]get
.
pgrep
대신 사용할 수도 있습니다 pgrep wget
.
ps -eaf | grep [w]get
합니다. 옵션은 ps
매뉴얼 페이지에 있습니다. man ps
.
편집 : 포 그라운드에서 Ctrl+ C또는 또는 @Zelda가 언급했듯이 '% x'로 죽일 수 있습니다. 여기서 'x'는 작업 번호가 기본 신호를 보냅니다 (Linux의 경우 SIGTERM).
fg
마지막으로 프로세스 한 프로세스 인 경우 '&'로 포 그라운드로 가져 오려면 입력 하십시오.
마지막이 아닌 경우 :를 입력 jobs
하고 '[]'로 표시된 '작업 번호'를 찾으십시오. 그런 다음 다음을 입력하십시오.
fg 2
.. 여기서 '2'는 작업 번호입니다 (예 :
foo@bar:~/junk/books$ jobs
[1]+ Running okular how_to_cook_a_turkey.pdf &
foo@bar:~/junk/books$ fg 1
okular how_to_cook_a_turkey.pdf <- this is now in the foreground.
올바른 방법은 입력 jobs
한 다음 작업 번호를 사용하여 종료하는 것입니다. pid를 사용하여 죽이려면 첫 번째 답변에서 언급 한 것처럼 pid를 포 그라운드로 가져와야합니다.
이 시도
~/Desktop$ sleep 1000 &
[1] 7056
~/Desktop$ jobs
[1]+ Running sleep 1000 &
/Desktop$ kill %1 #(%1 is the job number)
작업을 종료 한 직후 작업을 실행하면 다음을 볼 수 있습니다
Desktop$ jobs
[1]+ Terminated sleep 1000
내가 보지 못한 것 중 하나는 명령을 테스트 할 때 특히 유용하다는 것입니다 pidof
. pidof [command]
현재 실행중인 프로세스의 프로세스 ID를 찾는 데 사용할 수 있습니다 . 원하는 명령의 ID를 신속하게 찾을 수 있기 때문에 마음에 듭니다. 일반적으로 방금 호출 한 것입니다.
일단 pid가 있으면 간단히 프로세스를 종료 할 수 있습니다. 프로세스가 현재 실행중인 경우에만 프로세스를 종료하기위한 간단한 스크립트를 작성할 수 있습니다.
일반적인 예는 stress
도구입니다. 다음을 실행했다고 가정 해 봅시다.
$ stress -c 4 -m 4
터미널 창을 닫았습니다. 프로세스는 백그라운드에서 계속 리소스를 먹습니다.
그녀는 내가하는 일 :
$ x=`pgrep stress` ; sudo kill -9 $x
pgrep
처리 된 프로세스의 PID를 나열하고이를 종료하는 x
데 사용되는 변수에 저장 kill -9
합니다.
bash 마지막으로 중지 된 프로세스 (Ctrl-Z)에서 다음을 통해 죽일 수 있습니다.
kill %%
kill -9 %%
또는 선택하려면 다음을 사용하십시오.
jobs
그때:
kill %N
처럼 kill %2
jobs
전혀 없습니다output
및fg
SAIS을 :-bash: fg: 1: no such job
. 그러나 입력fg
은 잘 작동하고 잘pkill wget
작동합니다. 하지만ps -eaf|grep wget
다음kill <process number>
작업을 중단하지 복용량. 추신 : 나는 프로세스 번호 로 세 번째 숫자를 사용합니다 .