
백그라운드에서 프로세스를 시작하는 것과 관련하여 두 가지 질문이 있습니다.
백그라운드에서 프로세스를 시작하는 이유는 다음과 같습니다.
./my_program &
(
my_program
물론 exe 권한 세트가 있음) 다른 명령처럼 명령 프롬프트를 인쇄하도록 bash를 만들지 않습니까? 깜박이는 커서와 함께 빈 새 줄만 남았습니다.백그라운드에서 다음 새 프로세스를 실행하면 bash에 sth가 표시됩니다. 그렇게:
./my_program & [30] 1439 [27] Done ./my_program [28] Done ./my_program [29] Done ./my_program
이것은 백그라운드에서 또 다른 추가 프로세스를 시작하면 시스템이
[27], [28], [29]
현재 시작된 미리보기 프로세스(라인)에 대한 정보를 표시한다는 것을 의미합니까?([30]
라인)?
답변1
이런 일은 일어나서는 안 됩니다. 백그라운드에서 명령을 실행하면 bash는 일반적으로 작업 번호와 pid(아래 참조)만 인쇄한 다음 명령 프롬프트로 돌아갑니다.
내가 아는 유일한 이유는 이 상황에서 bash가 새 줄을 남기게 하는 이유는 명령이 실제로 존재하지 않는 경우입니다. PS1을 인쇄한 후 해당 명령에 대한 오류 메시지가 표시되기 때문입니다.
$ nonexistant_command & [1] 13856 $ nonexistant_command: command not found <empty line with blinking cursor here>
원인이 무엇이든, 이 빈 줄에서 Enter 키를 누르면 일반적인 프롬프트와 함께 새 줄이 인쇄됩니다(그리고 방금 생성한 작업이 완료되었다는 메시지도 표시될 수 있습니다. 아래 참조).
표시되는 추가 출력은 현재 백그라운드 작업에 대해 알려주는 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