2016-08-07 7 views
1

내 프로젝트의 시작 스크립트와 정지 스크립트를 빌드하려고합니다. 서버뿐만 아니라 sass 자동 컴파일러를 실행하고 두 파일의 출력을 파일로 리디렉션해야합니다. 나는 이것을 위해 lite-serversass --watch을 사용하고 있습니다.리눅스에서 백그라운드 프로세스 죽이기

이러한 프로세스를 동시에 실행하려면 프로세스를 배경으로 사용하기 위해 &을 사용하고 있습니다. 이것은 스크립트를 멈추게하는 문제를 야기하며, 평소처럼 Ctrl+C을 사용하여 스크립트를 멈출 수는 없습니다. 프로세스 ID를 텍스트 파일에 저장함으로써이 문제를 극복 할 수있을 것이라고 생각했습니다. 나는 종류 보이는 텍스트 파일로 프로세스 ID를 작성

kill $(cat .pids.txt) 

을 사용하고, 프로세스를 중지하려면 다음

# Start a sass watcher and a server running simultaneously. Store the PIDs in a 
# text file so that the processes can be easily stopped. 

(
    lite-server & 
    echo $! > .pids.txt & 
    sass --watch sass:css --style=compressed & 
    echo $! >> .pids.txt & 
) &> log.txt 
cat .pids.txt 

:

나는 다음 "시작"스크립트를 내놓았다 hackish. 내가하려는 일을 성취 할 수있는 더 좋은 방법이 있습니까?

+0

PID를 텍스트 파일에 쓰지 않고 컴퓨터에서 한 번만 (하나의 인스턴스) 실행되도록 바인딩 된 경우 'killall'명령을 사용할 수 있습니다. 'killall -s KILL lite-server sass' (개별적으로 또는 결합 된 것) – VanagaS

+0

좋습니다. 나는 그것이 최선의 관행이 될 것이라고 생각하지는 않았지만, 그것은 합리적입니다. –

답변

1

hackish라고하지 않는 경우 배열에 저장할 수 있습니다.

편집 :이 모든 백그라운드 프로세스 (다음 죽일 손으로하는 작업 -p 인쇄 stdout에 모든 백그라운드 프로세스의 PID를) 죽이고

kill $(jobs -p) 

: 또 다른 방법은 바로 실행하는 것입니다. kill -9 $(cat .pids.txt)

+0

저는 배쉬에 관해 전혀 모르는 사람이므로 예제를 제공해 줄 수 있습니까? –

+0

슬프게도 나는 bash에 관해서는 아무것도 모르는 사람이기도하다. bash에서 배열을 사용할 수는 있지만 나 자신을 한 적이 없다는 것을 알고있다. 배열 (https://www.gnu.org/software/bash/manual/bash.html#Arrays)에 대한 bash 참조는 배열의 사용이 매우 쉽다는 것을 나타냅니다. 배열에 무엇인가를 저장할 때마다 인덱스 변수를 도입하고 증가시킬 수 있습니다 : '((i ++)); echo $! > array [i] 배열에있는 ID를 가진 모든 프로세스를 죽이려면 for 루프를 사용하여 i가 0이 될 때까지 i를 감소시키고 발견 된 모든 PID에 대해 kill을 발행하십시오. 해당 코드를 테스트하지 않았습니다. – kay

+0

확인. 감사. 나는 그것을 밖으로 검사 할 것이다. –

1

당신은 등 .. 당신이 원하는 "죽이는"어떤 종류의 추가해야합니다.

ps -ef | grep lite-server | awk '{print $2}' | kill -9 

내가 ps -ef의 출력에 두 번째 열을 가정하면 서버의 프로세스 lite-server의 PID입니다.

2

나는 과정에 대한 grep을 대신 파일에 PID를 유지 프로세스를 종료하는 것이 좋습니다 :

관련 문제