백그라운드에서 리눅스 프로세스 시작


10

일부 프로그램을 시작하는 스크립트를 만들려고합니다.

startup.sh

knetworkmanager
emesene
keepassx

문제는 스크립트를 실행할 때 knetworkmanager 만 시작한다는 것입니다. 시작된 후 완료 될 때까지 기다립니다. 기다리지 않고 어떻게 프로그램을 시작할 수 있습니까? 스크립트가 끝나면 모든 프로세스가 여전히 종료되기 때문에 각 명령 뒤에 "&"를 추가 할 수 있다고 생각하지 않습니다.

답변:


16

스크립트를 실행하는 셸이 종료되면 시작한 프로세스에 HUP 신호를 보냅니다. 신호를받지 못하면 종료됩니다. 따라서 & 만 사용하는 것만으로도 응용 프로그램에 따라 다릅니다. 안전을 위해 다음과 같이 nohup을 사용하십시오.

nohup your-program >>/dev/null 2>>/dev/null &

자세한 내용은 nohup 매뉴얼 페이지를 참조하십시오 . nohup에 대한 Wikipedia 기사를 읽으십시오 .


다시 읽으면 OP가 호출 셸을 종료하는지 여부는 모호합니다. 그는 쉘이나 터미널을 종료하지 않고 스크립트를 종료하는 것에 대해서만 언급합니다.
Adam Bellaire

내 대답을 다시 읽으면 "스크립트를 실행하는 쉘이 종료 될 때"라고 말한 것을 알 수 있습니다. 이 쉘에 자체 가상 터미널 (서브 쉘이나 다른 것이 아님)이 있다고 가정하면 이것이 맞습니다.
Kim

@ 김 : 사실입니다. 귀하의 답변은 괜찮습니다. OP가 호출 쉘을 닫고 있는지 확실합니다.
Adam Bellaire

10

아니요,를 사용하는 경우 스크립트가 완료 될 때 프로세스가 종료되지 않아야합니다 &. 시도 해봐.

knetworkmanager &
emesene &
keepassx &

2

제공 한 예제 프로그램에 따라 KDE가 시작될 때 일부 프로그램을 시작하려고하는 것 같습니다. 그렇다면 KDE의 자동 시작 기능을 살펴보십시오. 이 문서 에서는 자동 시작에 프로그램을 추가하는 방법에 대해 자세히 설명하고 지침을 제공합니다.


사실, 내가하려고하는 일입니다. 고맙습니다.
Bart van Heukelom

1

다른 사람들이 말했듯이 &연산자를 사용 하여 쉘이 실행될 때 백그라운드에 명령을 넣습니다.

구성 요소 부분을 (동시 적으로가 아니라) 순서대로 실행하고 싶지만 여전히 전체를 배경으로하려면 다음과 같은 하위 셸을 사용하십시오.

(knetworkmanager; emesene; keepassx) &

또는 이전 부품의 성공적인 완료에 조건부로 각 부품의 작동을 원할 경우 :

(knetworkmanager && emesene && keepassx) &

0

각 명령 뒤에 '&'를 추가하면 분명히 작동합니다. 이는 해당 스크립트 또는 프로그램이 startup.sh가 완료된 후에도 계속 실행됨을 의미합니다.


0

또 다른 옵션은 / sbin / start-stop-daemon을 사용하여 프로세스를 데몬으로 시작하는 것입니다

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