Linux에서 실행 중인 프로세스를 중지하는 방법

Linux에서 실행 중인 프로세스를 중지하는 방법

주어진 IP 주소에 대해 ping을 보내는 스크립트 파일 pingIP.sh가 있습니다.

ping -c 70 74.125.228.71

문제는 실행 중인 스크립트를 중간에 중지하려고 하면 제대로 중지되지 않는다는 점입니다.

Linux cmd를 사용하면 ps -ef|grep pingIP |grep -v 'grep pingIP'프로세스 ID를 얻고 cmd를 사용하여 종료할 수 있습니다 kill -9 processid.

예를 들어 스크립트 파일을 실행합니다.

PING 74.125.228.71 (74.125.228.71) 56(84) bytes of data.
64 bytes from 74.125.228.71: icmp_seq=1 ttl=122 time=256 ms
64 bytes from 74.125.228.71: icmp_seq=2 ttl=122 time=244 ms
64 bytes from 74.125.228.71: icmp_seq=3 ttl=122 time=250 ms
64 bytes from 74.125.228.71: icmp_seq=4 ttl=122 time=254 ms
64 bytes from 74.125.228.71: icmp_seq=5 ttl=122 time=243 ms

지금 명령을 실행하면 kill스크립트 실행만 중지되지만 지정된 ping 횟수에 도달할 때까지 ping 응답은 계속됩니다.

스크립트 파일 실행을 중지한 후 핑을 방지하기 위한 제안 사항이 있습니까?

답변1

일반적으로 쉘을 호출할 때 신호(Java)를 보내 Ctrl+C상위 프로세스의 프로세스를 종료합니다 .Process.destroy()

이러한 작업을 수행하기 위한 깔끔한 도구는 pkill일부 패턴을 통해 프로세스를 종료할 수 있다는 것입니다.

pkill ping

일반 사용자는 다른 사용자의 프로세스를 종료할 수 없으므로 올바른 사용자 ID로 올바른 컴퓨터에 로그인했는지 확인하십시오.

보너스 팁: pgrep -fl ping일치하는 프로세스를 나열하여 해당 프로세스를 모두 종료할지 확인하는 데 사용합니다. 루트로 실행 pkill ssh하면반품당신을 죽이고 sshd어쩌면 당신을 가둘 수도 있습니다. 따라서 특히 루트로 실행하는 경우(어차피 피해야 하는 경우) 주의 깊게 확인하시기 바랍니다 pgrep.

답변2

쉘 프로세스와 그것이 생성하는 다른 프로세스를 종료하려면 setpgid()스크립트를 실행하기 전 하위 프로세스에서 새 프로세스 그룹을 시작하고 상위 프로세스의 반환 값을 사용하여 해당 프로세스 그룹을 종료하는 것이 좋습니다.fork()execve()kill(-pid)pidfork()

setpgid()전화를 걸 수 없는 경우에도 다음과 같이 할 수 있습니다.

바꾸다:

run("your-script its args");

하다:

run("set -m; trap 'kill %' TERM; your-script its args & wait")

답변3

킬을 사용하세요. 예를 들어. "killall 스크립트 이름". Killall은 이름으로 프로세스를 종료합니다. 또한 유사한 신호를 보낼 수도 있습니다. SIGKILL, SIGSTOP 등

답변4

작성한 프로세스 ID를 가져옵니다.

ps -ef|grep pingIP |grep -v 'grep pingIP'

그런 다음 다음을 사용하여 하위 프로세스를 종료합니다.

pkill -P process-id

관련 정보