저는 종종 bash
쉘 스크립트를 사용하여 여러 파일에 대해 간단한 명령을 실행합니다. 예를 들어, 나는 다음과 같은 있다고 가정 bash
라는 쉘 스크립트, script.sh
프로그램 / 명령을 실행, foo
세 개의 텍스트 파일에를 "a.txt"
, "b.txt"
, "c.txt"
:
#!/bin/bash
for strname in "a" "b" "c"
do
foo $strname".txt"
done
또한 foo $strname".txt"
속도가 느리므로 스크립트 실행에 오랜 시간 (예 : 몇 시간 또는 며칠)이 걸리는 것으로 가정합니다 . 이 때문에 nohup
터미널을 닫거나 연결을 끊어도 실행이 계속되도록 사용 하고 싶습니다 . 또한 스크립트가 즉시 백그라운드로 이동하기를 원하므로 &
연산자 를 사용하겠습니다 . 따라서 다음 명령을 사용하여 호출합니다 script.sh
.
nohup bash script.sh &
백그라운드에서 스크립트를 끊지 않고 실행하는 데에는 문제가 없지만 이제 어떤 이유로 든 실행을 종료하고 싶다고 가정합니다. 어떻게해야합니까?
내가 겪은 문제는를 보면에 해당하는 top
것만 볼 수 있다는 foo
것 "a.txt"
입니다. 해당 foo
호출을 종료 할 수 있지만 foo
해당하는 호출 이 수신 된 다음 해당 "b.txt"
호출도 종료해야합니다. for
루프에 지정된 수십 또는 수백 개의 텍스트 파일의 경우 모든 foo
을 하나씩 종료하는 것이 고통 스럽습니다 ! 그래서 어떻게 든 쉘 스크립트 에서 발행 된 특정 호출이 아닌 쉘 스크립트 자체 를 대신 종료해야합니다 .
내가 명령을 입력하면
ps -u myusername
myusername
내 사용자 이름은 어디에서 실행중인 프로세스 목록을 얻습니다. 그러나 두 개의 다른 프로세스 ID가 표시 bash
됩니다. 이 중 어떤 프로세스가 내 원래 통화에 해당하는지 어떻게 알 수 nohup bash script.sh &
있습니까?
for s in a b c; do foo "$s".txt; done
nohup
. 프로세스 목록을 불러 와서 시작한 작업을 볼 때까지 시간이 오래 걸립니다. ps
출력 에서 "niceness"열을 볼 수 있지만 여기에 대한 답변이 더 유용합니다.