it-gundan.com

백그라운드 프로세스를 종료하는 방법?

&를 사용하여 백그라운드에서 원격 컴퓨터에서 wget을 시작했습니다. 갑자기 다운로드가 중지됩니다. 프로세스를 종료 한 다음 명령을 다시 실행하고 싶습니다. 어떻게 종료합니까?

쉘 창을 닫지 않았습니다. 그러나 아시다시피 사용을 멈추지 않습니다. Ctrl+C 과 Ctrl+Z.

213
Mohammad Etemaddar

이 문제를 해결하는 방법에는 여러 가지가 있습니다.

방법 # 1-ps

ps 명령을 사용하여이 프로세스의 프로세스 ID를 찾은 다음 PID를 사용하여 프로세스를 종료 할 수 있습니다.

$ ps -eaf | grep [w]get 
saml      1713  1709  0 Dec10 pts/0    00:00:00 wget ...

$ kill 1713

방법 # 2-pgrep

pgrep를 사용하여 프로세스 ID를 찾을 수도 있습니다.

$ pgrep wget
1234

$ kill 1234

방법 # 3-pkill

실행 한 유일한 wget 인 경우 pkill 명령을 사용하여 이름으로 작업을 종료 할 수 있습니다.

$ pkill wget

방법 # 4-직업

현재 백그라운드에서 작업을 실행 한 곳과 동일한 셸에있는 경우 jobs 명령을 사용하여 여전히 실행 중인지 확인할 수 있으며 작업 번호로 종료 할 수도 있습니다.

나의 가짜 직업, sleep.

$ sleep 100 &
[1] 4542

직업 번호를 찾으십시오. NOTE : 숫자 4542는 프로세스 ID입니다.

$ jobs
[1]+  Running                 sleep 100 &

$ kill %1
[1]+  Terminated              sleep 100

방법 # 5-fg

fg 명령을 사용하여 백그라운드 작업을 다시 포 그라운드로 가져올 수 있습니다.

가짜 직업, sleep.

$ sleep 100 &
[1] 4650

직업 번호를 확인하십시오.

$ jobs
[1]+  Running                 sleep 100 &

작업 # 1을 다시 전경으로 가져간 다음 Ctrl+C.

$ fg 1
sleep 100
^C
$
274
slm

Bash에서는 fg를 사용하여 작업을 포 그라운드로 가져온 다음 Ctrl+C

또는 jobs를 사용하여 백그라운드에서 프로세스를 나열한 다음 수행하십시오.

kill %1

(1이 jobs에서 제공 한 숫자로 대체 됨)

77
Zelda

kill $!를 동일하게 사용하여 가장 최근에 백그라운드 작업을 종료 할 수 있습니다.

14
tek0078

편집 : 포 그라운드에서 한 번 할 수 있습니다 Ctrl+C또는 @Zelda가 언급했듯이 '% x'로 kill하십시오. 여기서 'x'는 작업 번호가 기본 신호를 전송합니다 (Linux의 경우 SIGTERM 일 가능성이 높습니다).

마지막으로 프로세스 한 프로세스 ( '&') 인 경우 fg를 입력하여 포 그라운드로 가져 오십시오.

마지막이 아닌 경우 jobs를 입력하고 '[]'로 표시된 '작업 번호'를 찾으십시오. 그런 다음 다음을 입력하십시오.

fg 2

.. 여기서 '2'는 작업 번호입니다 (예 :

[email protected]:~/junk/books$ jobs
[1]+  Running                 okular how_to_cook_a_turkey.pdf &
[email protected]:~/junk/books$ fg 1
okular how_to_cook_a_turkey.pdf            <- this is now in the foreground.
6
swisscheese

올바른 방법은 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
4
tmac

내가 여기서 보지 못한 것 중 하나는, 특히 명령을 테스트 할 때 매우 유용하다는 것이 pidof입니다. 당신이 사용할 수있는 pidof [command] 현재 실행중인 프로세스의 프로세스 ID를 찾습니다. 원하는 명령의 ID를 신속하게 찾을 수 있기 때문에 마음에 듭니다. 일반적으로 방금 호출 한 것입니다.

일단 pid가 있으면 간단히 프로세스를 종료 할 수 있습니다. 프로세스가 현재 실행중인 경우에만 프로세스를 종료하기위한 간단한 스크립트를 작성할 수 있습니다.

4
Try431

일반적인 예는 stress 도구입니다. 다음을 실행했다고 가정 해 봅시다.

$ stress -c 4 -m 4 

터미널 창을 닫았습니다. 프로세스는 백그라운드에서 계속 리소스를 먹습니다.

그녀는 내가하는 일 :

$ x=`pgrep stress` ; Sudo kill -9 $x 

pgrep는 처리 된 프로세스의 PID를 나열하고 변수 x에 저장 한 다음 kill -9 종료합니다.

1
Saptarshi Ghosh

가장 쉬운 방법은 kill 명령에서 -9 플래그를 사용하는 것입니다

[email protected]:/path> jobs
[1]+  Running                 /usr/home/script1.sh $i &
[email protected]:/path> fg
/usr/home/script1.sh $i
^C
[1]+  Stopped                 /usr/home/script1.sh $i
[email protected]:/path> kill -9 %1
[1]+  Stopped                 /usr/home/script1.sh $i
[email protected]:/path>
[1]+  Killed                  /usr/home/script1.sh $i
[email protected]:/path>
[email protected]:/path> jobs
[email protected]:/path>
0
handba

bash 마지막으로 중지 된 프로세스 (Ctrl-Z)에서 다음을 통해 죽일 수 있습니다.

kill %%
kill -9 %%

또는 선택하려면 다음을 사용하십시오.

jobs

그때:

kill %N

처럼 kill %2

0
Sławomir Lenart