이미 실행중인 프로세스에 추가 '종료'명령을 추가하려면 어떻게해야합니까?


11

정기적으로 나는 && shutdown -h now장기 프로세스 에 추가 하는 것을 잊어 버린다 . 첫 번째 명령이 호출 된 shutdown -h now 명령 을 추가 할 수있는 방법이 있습니까? 진행중인 프로세스를 중단시키지 않습니다. 아마도 PID를 볼 수 있습니까?


&&이전 명령이 성공한 경우에만 후속 작업이 실행 된다는 것을 알고 싶습니다 . 명령이 실패하더라도 실행하려면 ;대신 사용하십시오.
Zoke

답변:


13

모든 프로세스를 나열하고 출력을 통해 grep을 수행하기 위해 ps를 반복적으로 실행할 필요가 없습니다. ctrl-Z를 사용하여 프로세스를 백그라운드로 설정 한 후 실행

bg %1 ; wait %1 ; shutdown -h now

다른 백그라운드 작업이 실행중인 경우 ctrl-z를 실행할 때 [1] 대신 다른 작업 사양이 제공됩니다. 그렇다면 대신 사용하십시오.


3

프로세스가 5 초마다 실행 중인지 확인하고 적절한 조치를 수행하는 다음과 같은 작업을 수행 할 수 있습니다.

while true; do
  if ps -ef | grep -q '[l]ong-running-process'; then
    sleep 5
  else
    sudo poweroff
  fi
done

grep표현식 에서 대괄호를 주목하십시오 . 이는 grep프로세스가 ps목록 에있는 경우 프로세스가 일치하지 않도록 하기위한 것입니다 . 대괄호로 단일 문자를 둘러싸는 것으로 충분합니다.


작동하기 때문에 +1 내가했을 방식은 아닙니다.
Zoke

@ Zoke : 다른 방법이 있다면 관심이 있습니다.
Scott Severance 2012 년

답변도 게시했습니다. 원하는 경우 확인하십시오.
Zoke

kill -0 (pid)을 사용하여 프로세스를 종료하지 않고 프로세스가 있는지 확인할 수 있습니다.
푹신한

3

나는 항상 이것을한다.

  1. 프로세스를 시작하십시오.
  2. 내가 &&명령을 잊어 버렸다는 것을 깨달으십시오 .
  3. 프로세스를 일시 중단하고 쉘로 돌아가려면 Ctrl+ Z를 누르십시오 .
  4. 실행 fg && shutdown -h now:
    1. 방금 중단 한 프로세스를 포 그라운드로 다시 시작하십시오.
    2. 그런 다음 완료되면 원하는 것을 실행합니다.

또는 다음과 같은 다른 답변에서 제안한대로 투표 할 수 있습니다.

while ps -p $PID ; do sleep 5 ; done ; shutdown -h now

즉시 종료됩니다.
psusi

fg는 바로 완료됩니다.
psusi

@psusi no it not
Walking Wiki

@WalkingWiki, 이상해, 네 말이 맞아. 나는 이것을 2012 년에 다시 테스트하고 맹세한다고 맹세합니다.
psusi

1

pid를 알고 있다면 다음을 실행할 수 있습니다.

while ps -p $PID; sleep 5; done; shutdown -h now

ps에서 echo없이 실행하려면 다음을 수행하십시오.

while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now

마지막으로 출력없이 백그라운드에서 실행하십시오.

(while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now ) &

Scott의 솔루션은 좋은 솔루션이지만 grep이미 pid를 알고 있다면 반복 해서 할 필요가 없습니다 . 그리고 입력하는 것이 훨씬 빠릅니다. : p


0

쉘 스크립트를 작성하여 두 프로세스를 모두 실행하십시오.

MyShellScript.txt :

#!/bin/sh
MyProcessIdLikeToStart -o options && shutdown -h now

주어진 프로세스를 시작한 디렉토리에 저장 한 후 다음을 수행하십시오.

chmod +x MyShellScript.txt

그런 다음 명령을 실행하려면 입력 ./MyShellScript.txt하고 두 가지를 모두 수행하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.