가장 먼저; 당신이 과정을 시작하고 나면, 먼저 (히트를 중지하여 배경을 수 Ctrl- Z다음 입력) bg
백그라운드에서 다시 시작할 수 있도록. 이제는 "작업"이고 그 stdout
/ stderr
/ stdin
는 여전히 터미널에 연결되어 있습니다.
프로세스의 끝에 "&"를 추가하여 백그라운드에서 프로세스를 즉시 시작할 수 있습니다.
firefox &
무음 백그라운드에서 실행하려면 다음을 사용하십시오.
firefox </dev/null &>/dev/null &
추가 정보 :
nohup
는 stdout / stderr을 파일로 대신 보낼 수 있고 부모 스크립트를 닫으면 자식을 SIGHUP하지 않도록 응용 프로그램을 실행 하는 데 사용할 수있는 프로그램 입니다. 그러나 응용 프로그램을 시작하기 전에이를 사용했음을 예측해야합니다. nohup
작동 방식으로 인해 실행중인 프로세스 에만 적용 할 수 없습니다 .
disown
쉘의 작업 목록에서 쉘 작업을 제거하는 bash 내장입니다. 이것이 기본적으로 의미하는 것은 당신이 사용할 수 없다는 것입니다 fg
, bg
더 이상에,하지만 더 중요한 것은, 당신이 당신의 쉘을 닫을 때 정지 또는 전송하지 않습니다 SIGHUP
더 이상 그 아이에게. 달리 nohup
, disown
사용 후 프로세스가 시작하고 백그라운드로하고있다.
할 수없는 것은 프로세스를 시작한 후 프로세스의 stdout / stderr / stdin을 변경하는 것입니다. 적어도 껍질에서 아닙니다. 프로세스를 시작하고 stdout이 터미널 (기본적으로 수행하는 작업)임을 알려 주면 해당 프로세스는 터미널로 출력되도록 구성됩니다. 쉘은 프로세스의 FD 설정과 관련이 없으며 프로세스 자체가 관리하는 것입니다. 프로세스 자체는 stdout / stderr / stdin을 닫을 지 여부를 결정할 수 있지만 쉘을 사용하여 강제로 닫을 수는 없습니다.
백그라운드 프로세스의 출력을 관리하기 위해 "nohup"이 가장 먼저 떠오를 수있는 스크립트 옵션이 많이 있습니다. 그러나 대화 형 프로세스의 경우 시작하지만 침묵하는 것을 잊었습니다 ( firefox < /dev/null &>/dev/null &
), 실제로 많은 것을 할 수는 없습니다.
GNU를 얻는 것이 좋습니다 screen
. 화면을 사용하면 프로세스 출력이 귀찮게 될 때 실행중인 쉘을 닫고 새로운 것을 열 수 있습니다 ( ^Ac
).
아, 그런데 " $@
"를 사용하는 곳에서는 사용하지 마십시오 .
$@
의미 $1
, $2
, $3
...,에 명령을 설정합니다 :
gnome-terminal -e "vim $1" "$2" "$3" ...
-e는 하나의 인수 만 취하므로 원하는 것은 아닐 것 입니다. $1
스크립트가 하나의 인수 만 처리 할 수 있음을 나타내는 데 사용하십시오 .
쉘 명령 문자열 인 하나의 인수 만 취 gnome-terminal -e
하므로 -e
주어진 시나리오에서 여러 인수가 올바르게 작동하는 것은 실제로 어렵습니다 . 인수를 하나로 인코딩해야합니다. 가장 강력하고 단호하지만 최선의 방법은 다음과 같습니다.
gnome-terminal -e "vim $(printf "%q " "$@")"