output-file2>error-file]& 매개변수의 의미는 다음과 같습니다. COMMAND: 수행해야 하는 명령 또는 스크립트 백그라운드에서 실행됩니다. ARGS: 명령이나 스크립트에 대한 인수입니다. > 출력 -">
nohup는 Linux 및 Unix 시스템의 명령으로, 터미널이 종료될 때 프로세스가 백그라운드에서 계속 실행되도록 하는 것입니다. 정식 명칭은 "No Hang Up"인데, 이는 "No Hang Up"을 의미합니다.nohup명령을 사용하면 터미널을 종료하거나 SSH 연결을 닫은 후에도 명령을 계속 실행할 수 있습니다.nohup是Linux和Unix系统中的一个命令,其作用是在终端退出时,让进程在后台继续运行。它的全称为“no hang up”,意为“不挂起”。nohup命令可以让你在退出终端或关闭SSH连接后继续运行命令。
nohup命令的基本语法如下:
nohup COMMAND [ARGS ...] [> output-file 2> error-file] &
其中的参数含义如下:
COMMAND:需要在后台运行的命令或脚本。
ARGS:命令或脚本的参数。
> output-file:输出重定向到指定的文件中。
2> error-file:错误信息重定向到指定的文件中。
&:将命令放在后台运行。
nohup命令的执行过程分为以下几个步骤:
nohup命令将当前shell的标准输入、标准输出和标准错误输出全部重定向到/dev/null设备中,避免被关闭终端的信号所中断。
nohup命令将进程放到后台执行,并将进程的PID输出到终端。
进程开始执行,并将标准输出和标准错误输出重定向到指定的文件中。
用户可以退出终端或关闭终端窗口,进程仍然在后台运行。
使用nohup命令非常简单,按照上面的基本语法即可。以下是一些nohup命令的用法示例:
要在后台运行命令,只需要在命令行中输入以下命令即可:
nohup COMMAND &
例如,在后台运行一个Bash脚本:
nohup bash test.sh &
nohup bash test.sh > stdout.txt &
nohup bash test.sh 2> stderr.txt &
1. 重定向到同一文件
nohup bash test.sh > output.txt 2>&1 &
2. 重定向到不同文件
nohup bash test.sh > stdout.txt 2> stderr.txt &
3. 一个更为复杂的例子,重定向标准输入(stdin):
nohup ./myprogram > foo.out 2> foo.err < /dev/null &
这里多出来一个< /dev/null,意思是将标准输入重定向到/dev/null,以确保程序不会从标准输入中读取任何数据。
这个是为了解决一个实际问题:SSH会话常常拒绝注销(或者挂起),因为它不愿意去丢失与后台job(s)进行交互的数据。当遇到这个问题的时候,可以使用上面的命令,通过三次重定向来解决。
使用jobs命令可以查看当前 shell 中后台运行的任务列表,包括任务编号、状态和命令。
例如,我们在后台执行一个sleep 1000命令,使用jobs命令查看:
$ jobs [1]+ Running nohup sleep 1000 &
其中,方括号中的数字表示任务编号,加号或减号表示任务的优先级,Running表示任务正在后台运行。除此之外,还有其他可能的状态,包括Stopped(已停止)、Done(已完成)等。
我们还可以使用fg命令将一个后台任务移动到前台继续运行,例如:
$ fg %1
这个命令会将任务编号为 1 的任务移动到前台,继续执行。如果希望将任务暂停或恢复,可以使用Ctrl-Z键,在当前 shell 中发送SIGTSTP信号。
$ fg %1 nohup sleep 1000 ^Z [1]+ Stopped nohup sleep 1000
此时如果想要恢复运行,可以使用bg命令:
$ bg %1 [1]+ nohup sleep 1000 &
如果想要杀死该任务,可以使用kill命令:
$ kill %1 [1]+ Terminated nohup sleep 1000
如果你想杀死所有后台任务,但是又觉得一个个地比较麻烦,可以使用disown命令来解决:
$ disown -a
这个命令可以杀死所有后台任务,但不会有任何提示,你可以通过jobs
COMMAND: 필수 백그라운드에서 실행되는 명령 또는 스크립트입니다.ARGS: 명령 또는 스크립트의 매개변수.> 출력 파일: 출력을 지정된 파일로 리디렉션합니다.2> error-file: 오류 메시지가 지정된 파일로 리디렉션됩니다.&: 백그라운드에서 명령을 실행합니다./dev/null장치로 리디렉션됩니다./dev/null로 리디렉션하는 것을 의미합니다. 이것은 실질적인 문제를 해결하기 위한 것입니다. SSH 세션은 백그라운드 작업과 상호 작용하는 데이터를 잃지 않기 때문에 종종 로그아웃(또는 중단)을 거부합니다. 이 문제가 발생하면 위 명령을 사용하여 세 번 리디렉션하여 문제를 해결할 수 있습니다.
jobs명령을 사용하면 작업 번호, 상태 및 명령을 포함하여 현재 셸의 백그라운드에서 실행 중인 작업 목록을 볼 수 있습니다. 예를 들어 백그라운드에서
sleep 1000명령을 실행하고
jobs명령을 사용하여 다음을 확인합니다. rrreee 그중 대괄호 안의 숫자는 작업을 나타냅니다. 숫자, 더하기 또는 빼기 숫자는 작업의 우선순위를 나타내고
실행 중은 작업이 백그라운드에서 실행 중임을 나타냅니다. 또한
중지됨(중지됨),
완료(완료됨) 등 다른 가능한 상태도 있습니다. 또한
fg명령을 사용하여 백그라운드 작업을 전경으로 이동하여 계속 실행할 수 있습니다. 예: rrreee이 명령은 작업 번호 1이 있는 작업을 전경으로 이동하고 실행을 계속합니다. . 작업을 일시 중지하거나 재개하려면
Ctrl-Z키를 사용하여 현재 셸에서
SIGTSTP신호를 보낼 수 있습니다. rrreee지금 작업을 재개하려면
bg명령을 사용하면 됩니다. rrreee작업을 종료하려면
kill을 사용하면 됩니다. 명령: rrreee모든 백그라운드 작업을 종료하고 싶지만 하나씩 수행하는 것이 번거롭다면
disown명령을 사용하여 문제를 해결할 수 있습니다. rrreee이 명령 모든 백그라운드 작업을 종료할 수 있지만
jobs명령으로 이를 확인할 수 있습니다.
위 내용은 Linux에서 nohup 명령을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!