백그라운드에서 프로세스 실행

백그라운드에서 프로세스 실행

백그라운드에서 프로세스를 시작하는 것과 관련하여 두 가지 질문이 있습니다.

  1. 백그라운드에서 프로세스를 시작하는 이유는 다음과 같습니다.

    ./my_program &

    ( my_program물론 exe 권한 세트가 있음) 다른 명령처럼 명령 프롬프트를 인쇄하도록 bash를 만들지 않습니까? 깜박이는 커서와 함께 빈 새 줄만 남았습니다.

  2. 백그라운드에서 다음 새 프로세스를 실행하면 bash에 sth가 표시됩니다. 그렇게:

    ./my_program & [30] 1439 [27] Done ./my_program [28] Done ./my_program [29] Done ./my_program

    이것은 백그라운드에서 또 다른 추가 프로세스를 시작하면 시스템이 [27], [28], [29] 현재 시작된 미리보기 프로세스(라인)에 대한 정보를 표시한다는 것을 의미합니까?( [30]라인)?

답변1

  1. 이런 일은 일어나서는 안 됩니다. 백그라운드에서 명령을 실행하면 bash는 일반적으로 작업 번호와 pid(아래 참조)만 인쇄한 다음 명령 프롬프트로 돌아갑니다.

    내가 아는 유일한 이유는 이 상황에서 bash가 새 줄을 남기게 하는 이유는 명령이 실제로 존재하지 않는 경우입니다. PS1을 인쇄한 후 해당 명령에 대한 오류 메시지가 표시되기 때문입니다.

    $ nonexistant_command &
    [1] 13856
    $
    nonexistant_command: command not found
    <empty line with blinking cursor here>
    

    원인이 무엇이든, 이 빈 줄에서 Enter 키를 누르면 일반적인 프롬프트와 함께 새 줄이 인쇄됩니다(그리고 방금 생성한 작업이 완료되었다는 메시지도 표시될 수 있습니다. 아래 참조).

  2. 표시되는 추가 출력은 현재 백그라운드 작업에 대해 알려주는 bash입니다.

    먼저, 새로 생성된 백그라운드 프로세스의 현재 작업 번호와 해당 pid를 알려줍니다. 다음과 같습니다.

    $ some_command &
    [1] 1234
    

    이는 이제 명령이 some_command작업 1로 pid 1234를 사용하여 실행되고 있음을 의미합니다.

    백그라운드 작업이 끝나면 bash는 다음에 명령 프롬프트를 인쇄할 때(다른 백그라운드 프로세스를 생성했거나, 포그라운드에서 명령을 실행했거나, 단순히 빈 명령줄에서 Enter 키를 눌렀기 때문에) 다음을 인쇄하여 이를 알려줍니다. 다음과 같은 메시지:

    [1]  Done                    some_command
    

    이는 실행된 번호 1의 작업이 some_command이제 완료되었음을 의미합니다.

    bash가 현재 추적하고 있는 백그라운드 작업을 확인하려면 jobs다음과 같이 내장 기능을 사용할 수 있습니다.

    $ jobs
    [1]  Running                 some_command &
    [2]  Running                 some_other_command &
    

    작업을 포그라운드로 가져오려면 다음을 사용할 수 있습니다 fg.

    $ fg 2
    some_other_command
    

    이에 대한 자세한 내용을 보려면 다음을 시도해 보세요.help jobs

관련 정보