linux后台运行,linux挂起后怎么唤醒
各位老铁们好,相信很多人对linux后台运行都不是特别的了解,因此呢,今天就来为大家分享下关于linux后台运行以及linux挂起后怎么唤醒的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
Linux进程后台运行的几种方式
Ctrl+z/bg/nohup/setsid/&
在Linux中,如果要让进程在后台运行,一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中了:
./rsync.sh jobs
但是如上方到后台执行的进程,其父进程还是当前终端shell的进程,而一旦父进程退出,则会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。如果我们要在退出shell的时候继续运行进程,则需要使用nohup忽略hangup信号,或者setsid将将父进程设为init进程(进程号为1):对于已经在前台执行的命令,也可以重新放到后台执行,首先按ctrl+z暂停已经运行的进程,然后使用bg命令将停止的作业放到后台运行:bg%1,放回前台运行:%1。
# nohup./rsync.sh setsid./rsync.sh&或
#(./rsync.sh&)////在一个subshell中执行# ps-ef|grep rsync
nohup的用途就是让提交的命令忽略 hangup信号,标准输出和标准错误缺省会被重定向到 nohup.out文件中。。一般我们可在结尾加上”&”来将命令同时放入后台运行,也可用”> log.out 2>&1”来更改缺省的重定向文件名。
上面的试验演示了使用nohup/setsid加上&使进程在后台运行,同时不受当前shell退出的影响。那么对于已经在后台运行的进程,该怎么办呢?可以使用disown命令:
# jobs
# disown-h%1# ps-ef|grep rsync
效果与setid相同,但是disown后无法通过jobs命令查看了。
screen
还有一种更加强大的方式是使用screen,首先创建一个断开模式的虚拟终端,然后用-r选项重新连接这个虚拟终端,在其中执行的任何命令,都能达到nohup的效果,这在有多个命令需要在后台连续执行的时候比较方便。
GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换,可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
# yum install screen-y
常用screen参数:
# screen-S docker-d新建一个名叫docker-d的session,并马上进入
# screen-dmS docker-d新建一个名叫docker-d的session,但暂不进入,可用于系统启动脚本里
# screen-ls列出当前所有session
# screen-r docker-d恢复到zhouxiao这个session,前提是已经是断开状态(-d可以远程断开会话)
# screen-x docker-d连接到离线模式的会话(多窗口同步演示)
# screen./rsync.sh screen创建一个执行脚本的单窗口会话,可以attach进程ID
# screen-wipe检查目前所有的screen作业,并删除已经无法使用的screen作业
正常情况下,当你退出一个窗口中最后一个程序(通常是bash)后,这个窗口就关闭了。另一个关闭窗口的方法是使用C-a k,这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。
在每个screen session下,所有命令都以 ctrl+a(C-a)开始。
C-a w显示所有窗口列表
C-a k这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。
C-a d detach,暂时离开当前session
上面只是基本也是最常用的用法,更多请参考man screen或linux screen命令详解。需要了解的是,一个用户创建的screen,其他用户(甚至root)通过screen-ls是看不见的。另外,Ctrl+a在bash下是用来回到行开头,不幸与上面的组合快捷键冲突。
linux nohup命令
linux系统下nohup命令是什么呢?下面是具体介绍:
1、nohup命令简介:nohup命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup命令运行后台中的程序。要运行后台中的 nohup命令,添加(表示”and”的符号)到命令的尾部。
无论是否将 nohup命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out文件中。如果当前目录的 nohup.out文件不可写,输出重定向到$HOME/nohup.out文件中。如果没有文件能创建或打开以用于追加,那么 Command参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
2、nohup命令功能:
不挂断地运行命令。
3、语法:
nohup Command [ Arg… ] [ ]
退出状态:该命令返回下列出口值:
126可以查找但不能调用 Command参数指定的命令。
127 nohup命令发生错误或不能查找由 Command参数指定的命令。
否则,nohup命令的退出状态是 Command参数指定命令的退出状态。
4、nohup命令及其输出文件:
nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。
该命令的一般形式为:nohup command
5、使用nohup命令提交作业:
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command myout.file 21
在上面的例子中,输出被重定向到myout.file文件中。
使用 jobs查看任务。
使用 fg%n关闭。
另外有两个常用的ftp工具ncftpget和ncftpput,可以实现后台的ftp上传和下载,这样就可以利用这些命令在后台上传和下载文件了。
###################错误提示############
nohup应对的就是突然断网或者关闭终端时屏蔽发送给后台任务的 SIGHUP信号进而使任务不中断继续运行。
exit或者 logout命令正常退出的话根本用不着 nohup,你的运行的命令都不会被中断。不信你可以 command后 exit,再次登录,ps查看一下命令肯定还在后台跑。
简单来说,如果你使用的是 exit或者 logout命令正常登出,系统只会向前台任务发送 SIGHUP信号,到后台的任务时不会收到 SIGHUP信号的。如果你强行关闭的窗口或者断网了,系统会向你的前后台任务都发送 SIGHUP信号,此时如果使用了 nohup去运行任务,nohup会屏蔽 SIGHUP信号,任务也就不会被中断了。
6、nohup命令的用法:
nohup/root/start.sh
在shell中回车后提示:
[~]$ appending output to nohup.out
原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。
当shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端。
linux怎么让进程切换到后台运行
一、Shell支持作用控制,有以下命令:
command让进程到后台运行
jobs-l查看后台运行的进程
fg%n让后台运行的进程n到前台来
bg%n让进程n到后台去
PS:"n"为jobs查看到的金城编号
二、执行命令&切换到后台
在linux终端运行命令的时候,在命令尾囧上&符号,就可以让程序在后台运行。
三、切换正在运行的程序到后台
如果程序正在前台运行,可以使用Ctrl+z先把程序暂停,然后用bg%[number]命令把这个程序放在后台运行,这个步分三步若下:
1、暂停程序运行Ctrl+z
Ctrl+z跟系统任务有关的,Ctrl+z可以将一个正在前台执行的命令放到后台。并且暂停。
[Oracle@linuxidc~]$ sh ins.sh
[1]+Stopped ins.sh
2、查看暂停的程序
查看jobs使用jobs或ps命令可以察看正在执行的jobs。.[oracle@linuxidc~]$ jobs-l
[1]+ 4524Stopped ins.shjobs命令执行的结果,+表示是一个当前的作业,-表示当前作业之后的一个作业。
jobs-l选项可显示所有任务的PID,jobs的状态可以是running,stopped。Terminated
3、切换程序之后台
bg将一个在后台的暂停的命令,变成据需执行弱国后台中有多个命令,可以用bg%jobnumber将选中的命令调出
[oracle@linuxidc~]$ bg%1
[oracle@linuxidc~]$ jobs-l
[1]+ 4524Running ins.sh
4.切换程序至前台
也可以用 fg%[number]指令把一个程序掉到前台运行
[oracle@linuxidc~]$ fg%1
。/tcpserv01