여러 터미널에서 바이너리를 실행하는 쉘 스크립트

여러 터미널에서 바이너리를 실행하는 쉘 스크립트

저는 쉘 스크립팅을 처음 사용하지만 다른 입력 파일 세트에 대해 루프에서 실행하려는 일부 바이너리가 있습니다. 순서대로 실행해야 합니다. 현재 실행이 완료된 후 반복하세요.

별도의 터미널에서 두 프로세스를 모두 실행하고 pid를 저장하려고 시도했지만 프로세스를 종료하려고 하면 pid가 변경된 것처럼 보입니다.

#!/bin/bash
gnome-terminal -e "vi" & MAIN_PID=$!
gnome-terminal -e "gedit" & SIM_PID=$!
echo "MAIN Process ID is " $MAIN_PID
echo "SIM Process ID is " $SIM_PID
sudo kill $MAIN_PID

터미널 출력:

기본 프로세스 ID는 8532입니다.
SIM 프로세스 ID는 8542입니다.
# '-e' 옵션은 더 이상 사용되지 않으며 이후 버전의 gnome-terminal에서 제거될 수 있습니다.
# 옵션을 종료하려면 "--"를 사용하고 그 뒤에 실행할 명령줄을 배치합니다.
Kill: (8532): 해당 프로세스가 없습니다.
사용자:~/데스크탑$ ps-A |
 1026화 00:00:01 dconf-서버CE
 8541포인트/3 00:00:00
사용자:~/데스크탑$ ps-A |
 8550분/4 00:00:00편집자

내가 원하는 것을 시작하는 더 쉬운 방법이 있다면 나도 알고 싶습니다. 이러한 프로세스를 시작하고 몇 가지 조건을 확인하여 언제 완료되는지 확인하고 프로세스를 종료한 후 다른 입력 세트로 반복할 계획입니다.

답변1

실행하면 gnome-terminal -e "vi" & MAIN_PID=$!인스턴스의 PID가 캡처되지 않습니다. 소유 프로세스의 PID를 찾으려면 출력에서 ​​몇 가지 마법을 사용할 수 있습니다.viMAIN_PIDgnome-terminalgnome_terminalpstree

pstree -p $MAIN_PID | grep -o 'vim([0-9]*) | grep -o '[0-9]*'

kill -0프로세스가 여전히 존재하는지 확인하려면 신호를 보내지 않고 프로세스가 존재하면 종료 코드 0을 반환하고 존재하지 않으면 종료 코드 1을 반환하는 것을 사용할 수 있습니다 .

관련 정보