Bash 스크립트의 잘못된 명령

Bash 스크립트의 잘못된 명령

아래와 같이 프로세스를 종료하기 위해 bash 스크립트에 명령을 추가했습니다.

#!/bin/bash
kill -9 $(ps ux | grep 'fluent' | awk '{print $2}')

예를 들어 스크립트를 실행하면 ./mykill아무런 효과가 없습니다.

$ ps ux | grep fluent
ko 21690  0.0  0.0 112664   972 pts/3    S+   15:28   0:00 grep --color=auto fluent
ko 26573  5.1  1.0 1743688 673592 ?      Sl   May14 836:08 /state/partition1/ans190/v190/fluent/cortex.19.0.0 -f fluent -cmd-port:35881:compute-0-4.local -workbench-session (fluent "3ddp -pshmem  -host -alnamd64 -r19.0.0 -t16 -mpi=ibmmpi -path/state/partition1/ansys190/v190/fluent -ssh")
ko 26581  0.0  0.0      0     0 ?        Z    May14   0:00 [fluent] <defunct>
$
$
$ ~/mykill
Killed
$ ps ux | grep fluent
ko 21690  0.0  0.0 112664   972 pts/3    S+   15:28   0:00 grep --color=auto fluent
ko 26573  5.1  1.0 1743688 673592 ?      Sl   May14 836:08 /state/partition1/ans190/v190/fluent/cortex.19.0.0 -f fluent -cmd-port:35881:compute-0-4.local -workbench-session (fluent "3ddp -pshmem  -host -alnamd64 -r19.0.0 -t16 -mpi=ibmmpi -path/state/partition1/ansys190/v190/fluent -ssh")
ko 26581  0.0  0.0      0     0 ?        Z    May14   0:00 [fluent] <defunct>

그러나 터미널에서 명령을 실행하면 해당 명령이 종료됩니다.

$ kill -9 $(ps ux | grep 'fluent' | awk '{print $2}')
-bash: kill: (21899) - No such process
$ ps ux | grep fluent
ko 21915  0.0  0.0 112664   972 pts/3    S+   15:31   0:00 grep --color=auto fluent

그렇다면 이유는 무엇입니까?

답변1

귀하의 접근 방식에는 몇 가지 문제가 있습니다.

프로세스를 감지하는 방식은 신뢰할 수 없습니다. fluent종료하려는 프로세스가 아니더라도 프로세스가 명령줄에 있을 수 있습니다 . 예를 들어 스크립트를 호출하면 kill-fluent자체적으로 종료됩니다.이름만으로 프로세스를 종료하지 마십시오.. 이것은 정말 신뢰할 수 없습니다.

프로세스를 종료하는 가장 좋은 방법은 자체 원격 제어 메커니즘을 사용하여 종료 명령을 보내는 것입니다. 가능하지 않은 경우 열린 파일을 기반으로 종료하십시오.fuser. 바이너리를 실행하면 바이너리를 여는 것으로 간주됩니다. 예를 들어, 실행 중인 모든 프로세스를 종료하려면 /usr/bin/fluent를 실행합니다 fuser -k /usr/bin/fluent.

명령줄을 기반으로 프로세스를 종료해야 하는 경우 를 사용하지 마십시오 grep. ps … | grep …grep 프로세스가 포함될 수 있습니다. 이 ps명령과 이 grep명령은 병렬로 실행되므로 두 프로세스의 상대 속도에 따라 ps나열될 수도 있고 그렇지 않을 수도 있습니다. grep시작되었습니다. 사용pkill대신에.

프로세스에 관해서는 <defunct>그들을 죽이는 것을 잊어버리십시오: 그들은 이미 죽었습니다. 이것이 "존재하지 않는다"는 의미입니다: 그들은 존재합니다좀비.

관련 정보