내가 하고 싶은 것은 내부에서 새로운 프로세스를 생성하고 bash
내 터미널이 다음 줄에 있고 프로세스가 일반적으로 내 표준 출력을 훔치는 것을 제외하고는 아무 일도 일어나지 않은 것처럼 행동하는 것입니다...
지금 원 apt-get update
하지만 모든 다운로드를 보는 대신 일부 구성 파일을 편집하고 싶기 때문에 vi /some/config
이 두 가지 작업을 동시에 수행할 수 있어야 합니다.
명확히 하기 위해 질문하기 전에 몇 가지 내용을 읽었으므로 터미널이 닫힌 후에도 프로세스가 유지되기를 원하므로 [아직 종료되지 않은 경우] 하위 프로세스가 아닌 것 같습니다. 아마도 하위 프로세스가 아닐 것입니다. 쉘, 포크일까요? 포크 말이에요? 이렇게 포크하려면 어떻게 해야 하나요?
답변1
백그라운드에서 프로세스를 실행하여 동시에 다른 작업을 계속할 수 있는 방법을 찾고 있는 것 같습니다. 이는 명령 끝에 & 기호를 추가하여 수행됩니다. 예를 들어, 실행 후 몇 밀리초 후에 sleep 5h
백그라운드 명령이 수행되는 동안 다른 명령을 입력할 수 있습니다. 터미널이 닫힌 후에도 프로세스가 생존하려면 다음 disown
과 같이 프로세스를 격리해야 합니다.리디렉션. 바라보다공정 관리그리고직업 통제훌륭한 문서화를 위해.
또는 포그라운드에서 명령을 실행한 후 다른 터미널을 실행하여 다른 작업을 수행할 수도 있습니다. 나머지는 운영 체제가 처리합니다.
답변2
'</dev/null'은 /dev/null에서 표준 입력을 읽고 있습니다. 입력을 정상적으로 리디렉션합니다. 즉시 EOF를 반환합니다. 즉, 빈 파일에서 읽는 중입니다. 이는 STDIN에서 데이터를 읽고 싶은 경우가 있지만 이 경우에는 그렇지 않은 상황에 유용한 관용어입니다.
답변3
setsid
나는 당신이 새 세션에서 프로그램을 시작하는 명령을 찾고 있다고 생각합니다 . 따라서 다음을 수행할 수 있습니다.
setsid apt-get update
apt-get update
그리고 그들이 침묵하길 원한다면 :
setsid apt-get update >/dev/null 2>&1
이점은 setsid
이 방법으로 시작된 프로세스가 터미널이 닫힌 후에도 계속된다는 것입니다.
답변4
nohup apt-get update > /dev/null 2> /dev/null < /dev/null & vi /some/config
https://en.wikipedia.org/wiki/Nohup#Overcoming_hanging
기술적으로 nohup은 stdin이 /dev/null임을 의미하므로 < /dev/null
no