일부 서버 응용 프로그램을 시작하는 Ubuntu 컴퓨터용 쉘 스크립트를 작성하고 싶습니다. 내 Java 애플리케이션에서 실행하려면 이 스크립트가 필요합니다. 하지만 나중에 Java 애플리케이션에서 모두 종료할 수 있도록 이러한 모든 서버 프로세스를 그룹화하는 쉬운 방법이 필요합니다.
내 생각은 쉘 스크립트에서 상위 프로세스 ID를 설정하고 나중에 명령을 사용하여 종료하는 것입니다 pkill
.
쉘 스크립트를 통해 이를 어떻게 수행합니까?
답변1
나중에 종료하는 데 사용할 수 있는 PID를 기록하여 Appium 서버를 실행할 수 있습니다. 예를 들어
Appium_server_1 & instance1=$!
Appium_server_2 & instance2=$!
Appium_server_3 & instance3=$!
.
.
.
그럼 다 죽일 수 있어예변수죽이다주문하다.
답변2
쉘이 PPID
내장 변수를 지원하는 경우 쉘을 호출하는 프로세스의 PID에 정말로 관심이 있는 경우 이를 사용할 수 있습니다.
쉘의 PID에 관심이 있고 이를 다른 사람이 사용할 수 있게 만들고 싶다면 이것을 사용하십시오 $$
.
답변3
귀하의 질문을 올바르게 이해했다면 대답은 귀하가 그렇게 할 수 없다는 것입니다. Java 프로그램이 시작되고 쉘 스크립트를 호출하여 더 많은 프로세스를 시작합니다. 그런 다음 쉘 스크립트가 종료되고 다른 모든 프로세스를 종료할 수 있어야 하는 Java 프로세스에 제어권을 전달하려고 합니다.
짧은 대답은 할 수 없다는 것입니다. 쉘 스크립트가 종료되면 이에 의해 시작된 모든 프로세스는 Java 프로세스 대신 프로세스 번호 1(init)이 소유하게 됩니다.
추가 프로세스를 시작하기 위해 쉘 스크립트를 사용하는 이유가 있습니까?
Java를 사용하여 모든 프로세스를 시작하거나(Process 라이브러리 사용) Supervisord(http://supervisord.org/). 그런 다음 Supervisord를 제어하여 Java 프로그램에서 프로세스를 시작/중지할 수 있습니다.
모든 프로세스의 이름이 동일한 경우 killall 명령을 사용하여 이름으로 해당 프로세스를 종료할 수도 있습니다.