Linux는 kill + PID를 통해 백그라운드 프로세스를 중지합니다.

Linux는 kill + PID를 통해 백그라운드 프로세스를 중지합니다.

여기https://unix.stackexchange.com/a/104825/109539Man은 백그라운드 프로세스를 중지하려면 kill + PID를 사용해야 한다고 말합니다. 하지만 kill+PID를 사용하여 백그라운드 프로세스를 중지할 수는 없으며 kill+JOB ID만 중지할 수 있습니다.

[KPE@home Temp]$ jobs
[KPE@home Temp]$ ps
  PID TTY          TIME CMD
13270 pts/0    00:00:00 bash
23257 pts/0    00:00:00 ps
[KPE@home Temp]$ mc &
[1] 23258
[KPE@home Temp]$ ps
                             PID TTY          TIME CMD
13270 pts/0    00:00:00 bash
23258 pts/0    00:00:00 bash
23262 pts/0    00:00:00 mc
23264 pts/0    00:00:00 ps

[1]+  Stopped                 . /usr/libexec/mc/mc-wrapper.sh
[KPE@home Temp]$ kill -s 15 23262
[KPE@home Temp]$ ps
  PID TTY          TIME CMD
13270 pts/0    00:00:00 bash
23258 pts/0    00:00:00 bash
23262 pts/0    00:00:00 mc
23266 pts/0    00:00:00 ps
[KPE@home Temp]$ kill %1
[1]+  Terminated              . /usr/libexec/mc/mc-wrapper.sh
[KPE@home Temp]$ ps
  PID TTY          TIME CMD
13270 pts/0    00:00:00 bash
23267 pts/0    00:00:00 ps
[KPE@home Temp]$ 

그래서 문제는 pid kill로 bg 프로세스를 중지하는 방법입니다.

답변1

C-Z프로그램이 ( mc=전송 SIGSTP하거나 SIGSTOP=일시 중지하면(셸에서 "중지됨"으로 표시됨)) SIGKILL재개될 때까지 더 이상 신호를 즉시 받아들이지 않습니다( 제외하지만 사용하기에는 좋지 않습니다). 일단 재개하면 신호(일시 중지된 동안 대기 중인 신호도 포함)를 SIGCONT수락합니다 .SIGTERM

kill -CONT $!; kill -TERM $! # $! refers to the pid of the last-spawned job

kill %1이는 쉘의 내장 기능이 kill뒤에서 이 두 단계를 수행할 수 있기 때문에 작동합니다.

답변2

먼저 pid를 얻으세요

ps aux | grep process_name나를 위해 일해

다음과 같이 출력되어야 합니다.

root      2545  0.0  0.0  85128  3128 ?        Ss   Apr19   0:07 /usr/sbin/apache2 -k start
www-data  2569  0.0  0.0 2011388 10132 ?       Sl   Apr19   1:19 /usr/sbin/apache2 -k start
www-data  2570  0.0  0.0 2011380 10108 ?       Sl   Apr19   1:22 /usr/sbin/apache2 -k start
coteyr   23344  0.0  0.0  11748   928 pts/3    S+   10:12   0:00 grep --colour=auto apache

그러면 당신 이 원하는 대로 kill 2545할 수 있습니다.kill -9 2545

즉, 가능하면 kill을 사용하지 않는 것이 좋습니다. 프로세스를 종료하려면 "올바른" 방법을 사용하십시오. 종종 일종의 백그라운드 프로세스 정리 기능이 손실될 수 있습니다. 하지만 때로는 다른 방법이 없을 때도 있습니다.

관련 정보