linuxnohup命令原理
-
nohup命令是在Linux系统中用来在后台运行程序的命令,它的原理是通过将要执行的命令与标准输入、标准输出、标准错误流断开,然后将其与一个无关的终端关联起来,使得程序在执行过程中不会受到终端断开的影响。
具体来说,nohup命令的原理可以分为以下几个步骤:
1. 执行nohup命令时,它会创建一个子进程,并调用fork()系统调用来复制当前进程的地址空间和文件描述符表。
2. 子进程会关闭标准输入、标准输出和标准错误流,然后将它们重定向到/dev/null,这样就确保程序在后台运行时不会产生任何输出。
3. 子进程会调用setsid()系统调用创建一个新的会话,并成为会话的首进程。这样做的目的是使得程序与当前终端脱离关系,不会受到终端关闭的影响。
4. 子进程会将当前目录改为根目录(chdir(“/”)),这样即使当前目录被删除或卸载,程序也能继续运行。
5. 子进程会将umask设置为0,以保证程序创建的文件权限最大。
6. 子进程会关闭不需要的文件描述符,释放资源。
7. 子进程会执行用户指定的命令。
总的来说,nohup命令的原理可以归结为将要执行的命令与终端断开关联,并使其在后台运行,以保证程序的持续运行,不受终端关闭的影响。这在需要长时间运行的程序或需要在远程服务器上持续运行的程序中非常有用。
2年前 -
Linux中的nohup命令用于在后台运行进程,并且即使用户退出当前终端,该进程仍将继续运行。这个命令非常有用,特别是在需要长时间运行的任务或者需要在远程服务器上运行的任务中。
nohup命令的原理是通过将任务与终端的关联断开来实现的。当用户在终端运行nohup命令时,该命令会将标准输入、标准输出和标准错误输出重定向到一个名为nohup.out的文件中。这样,即使用户退出终端或关闭SSH连接,进程仍将继续以后台方式运行,并且其输出仍将写入nohup.out文件。
以下是nohup命令工作的大致流程:
1. 执行nohup命令时,它会创建一个新的子进程,然后将子进程的标准输入、标准输出和标准错误输出进行重定向,使其输出到nohup.out文件。
2. nohup命令会关闭子进程的终端关联,使其独立于当前终端运行。
3. 子进程脱离了终端之后,它将不再接收来自终端的信号,并且不会受到终端关闭或用户退出的影响。
4. 子进程通过接收SIGHUP信号来防止进程终止。SIGHUP信号是当终端关闭时发送给其所有关联进程的信号。当接收到SIGHUP信号时,子进程会忽略它。
5. 子进程继续以后台方式运行,直到任务完成或进程手动终止。nohup命令的使用示例:
1. 后台运行脚本:nohup ./script.sh &
这条命令会将script.sh脚本以后台方式运行,并将输出重定向到nohup.out文件中。2. 查看nohup输出:tail -f nohup.out
这条命令可以实时查看nohup.out文件中的输出内容。3. 杀死nohup进程:kill process_id
这里的process_id是nohup进程的ID,可以使用命令ps -ef | grep nohup来查找进程ID。使用kill命令终止进程。总之,nohup命令通过将任务与终端的关联断开,并将输出重定向到一个文件中,实现在后台运行进程的效果。它在需要长时间运行的任务或者在远程服务器上运行任务时非常实用。
2年前 -
标题:Linux中nohup命令的原理及使用方法
导言:
在Linux系统中,有时候我们需要运行一个长时间的任务,但是又不希望该任务受到用户终端退出影响。这时,我们可以使用nohup命令来运行任务,保证任务在后台持续运行。本文将会详细介绍nohup命令的原理及使用方法。一、nohup命令的作用和原理
1. nohup命令的作用
nohup是一个在Unix和类Unix操作系统中用来忽略挂断(SIGHUP)信号,从而使命令在后台运行获得一定程度的保护。它可以在你登出后继续运行进程。通过nohup命令运行的任务,将忽略终端的挂起信号,即使用户退出终端,该任务也会一直在后台运行。2. nohup命令的原理
nohup这个命令在执行时,会将标准输入重定向到指定文件(默认是nohup.out),标准输出和标准错误输出则重定向到/dev/null设备。这样,在用户终端终止的时候,任务不会受到终端挂起信号的影响。二、nohup命令的使用方法
1. 基本语法
nohup Command [Arg…]
例如:nohup ./test.sh arg1 arg2 &2. 使用示例
以下是一些nohup命令的使用示例:2.1 启动一个后台任务
nohup ./test.sh &2.2 将输出重定向到指定文件
nohup ./test.sh > output.log &2.3 将输出重定向到/dev/null
nohup ./test.sh > /dev/null &2.4 使用nohup同时后台运行多个任务
nohup ./test1.sh & nohup ./test2.sh &2.5 查看nohup命令后台运行的任务
ps -ef | grep nohup2.6 结束nohup命令后台运行的任务
2.6.1 使用kill命令结束任务
首先使用ps命令查看nohup命令启动的后台任务的进程号,然后使用kill命令结束这个任务。例如:
ps -ef | grep test.sh
kill -9 <进程号>2.6.2 使用jobs命令结束任务
可以使用jobs命令列出当前所有正在执行的后台任务,然后使用kill命令结束指定任务。例如:
jobs
kill -9 %<任务号>以上就是使用nohup命令的基本方法和示例。
总结:
本文详细介绍了nohup命令的作用、原理以及使用方法。nohup命令可以使命令在后台持续运行,并且不会受到终端挂起信号的影响。通过重定向输入输出,nohup命令可以将输出重定向到指定文件或/dev/null设备。同时,我们也介绍了如何查看和结束nohup命令后台运行的任务。对于需要长时间运行的任务,使用nohup命令可以给予一定的保护和便利。2年前