이미 실행 중인 다른 작업 후에 실행되도록 bash에서 작업을 예약하는 방법은 무엇입니까? [반복하다]

이미 실행 중인 다른 작업 후에 실행되도록 bash에서 작업을 예약하는 방법은 무엇입니까? [반복하다]

비슷한 것을 찾고 있습니다 command1 ; command2. 즉, command2이후에 실행 하는 방법이 있지만 이미 실행 중일 때 실행되도록 command1예약하고 싶습니다 .command2command1

command2command1표준 입력을 사용하지 않고 command1출력에 입력이 실용적이지 않을 정도로 많은 텍스트를 생성하지 않는다고 가정하면(입력한 문자가 출력과 혼합됨 command1) 간단히 입력하고 Enter를 누르면 이 문제가 해결됩니다.

답변1

일반적으로 내가 하는 일은 다음과 같습니다.Ctrl+Z fg && command2

  1. Ctrl+ Z일시 중지하고 쉘에 더 많은 내용을 입력할 수 있습니다.
  2. (선택 사항 bg) command2를 입력하는 동안 백그라운드에서 command1을 다시 시작합니다.
  3. fg && command2command1이 성공하면 command1이 포그라운드에서 복원되고 command2가 이후에 대기열에 추가됩니다. 물론 원하는 경우 ;또는 로 바꿀 수 있습니다 ||.&&

답변2

  1. 명령을 시작하다

    command1
    
  2. Ctrl실행을 일시 중지하려면 +를 누르세요.Z

  3. 일시 중지 명령을 실행하여 해당 작업 번호를 찾습니다. (일반적으로 일시 중지 명령을 콘솔에 표시할 때 이미 콘솔에 인쇄되어 있습니다.)

    jobs
    
  4. command1백그라운드에서 계속 하자

    bg
    
  5. 계획 실행이 command2완료되기를 기다리고 있습니다.command1

    wait -n <command1 job number> ; command2
    

문서작업 제어 내장

답변3

몇 가지 옵션이 있습니다.

  • 앰퍼샌드와 함께, "백그라운드로 푸시됨", 두 번째 프로그램은 첫 번째 프로그램이 시작된 후에 시작되지만 서로 병렬로 실행될 수 있습니다.

    command1 & command2
    
  • 앰퍼샌드 두 개 포함, "논리 AND", 두 번째 프로그램은 첫 번째 프로그램이 성공적으로 완료된 후에만 시작됩니다.

    command1 && command2
    
  • 세미콜론으로명령줄에서 명령을 분리하고 첫 번째 프로그램이 완료되면 실패하거나 중단되더라도 두 번째 프로그램이 시작됩니다.

    command1 ; command2
    
  • 당신은 그것을 사용할 수 있습니다wait <PID>동일한 쉘(동일한 터미널 창)에서 이미 실행된 경우 첫 번째 명령이 완료될 때까지 기다립니다.

  • 그렇지 않고 첫 번째 명령이 이미 다른 셸(다른 창)에서 실행된 경우 작은 명령을 사용할 수 있습니다.while 루프는 ps를 사용하여 PID가 여전히 발견되는지 확인합니다.ps. 더 이상 찾을 수 없으면 두 번째 명령이 실행됩니다.

    bash이 데모 예제는 PID를 통해 실행 중인지 확인 top하고 명령을 실행하는 데 사용됩니다 .

    echo "*** $USER, I am ready now ***"
    

    더 이상 실행되지 않는 경우 top.

    pid=$(ps -A|grep top|cut -d ' ' -f 1); \
    while [ "$pid" != "" ]; do ps -A|grep "$pid" > /dev/null; \
    if [ $? -eq 0 ]; then sleep 5;else pid=""; fi; done; \
    echo "*** $USER, I am ready now ***"
    

답변4

두 개의 터미널을 사용할 수 있는 옵션이 있는 경우 다음을 수행할 수 있습니다.

  • 터미널에서 command1을 실행했다고 가정합니다(terminal1이라고 부르겠습니다).
  • 새 터미널을 시작합니다(terminal2라고 부르겠습니다).
  • command1의 프로세스 ID를 찾습니다(command1_pid라고 하겠습니다). 터미널2에서 명령을 실행합니다. ps -ef | grep <command1>실수로 하위 문자열이 있는 다른 프로세스를 찾지 않도록 grep 명령에서 필터 문자열을 올바르게 구성할 수 있습니다.
  • 명령 실행wait <command1_pid> ; command2

기본적으로 wait제공된 PID가 종료될 때까지 기다렸다가 반환되는 bash 내장 기능입니다. command1이 완료될 때까지 기다리는 작업을 bash wait명령에 위임하기만 하면 됩니다.

관련 정보