Linux中程序后台运行、&?nohup?or screen?

举个例子:我这里有一个xxx.jar包需要运行,如果写成这样

java -jar xxx.jar

那么此时,这个shell将会被占用,无法再做其他操作。
此时只要ctrl+c中断,也就意味着这个程序也中断了,这很不好。
&
这时,我们可以这样

java -jar xxx.jar & 

加了&之后,你会发现,程序居然已经在后台运行了,如果你的程序有输出,那么输出的内容会直接显示在shell中,不用惊慌,按下回车键,你就又可以正常输入命令了
运行过程中的输出内容会直接显示再屏幕上,并不会保存
但有的时候我们需要将输出信息保存,以便于后期可以查看,那么我们便可以这样

java -jar xxx.jar >> ./log.txt &

此时,它的输出内容便会保存到当前目录下面的log.txt文件中

>  表示覆盖写入
>> 表示追加写入 

上面的操作,按理说已经满足了我们的需求(即程序可以后台运行,日志也可以保存
但是&有一个致命的缺点,当你关掉shell之后,那你通过&这种方式运行的程序会立马结束
有没有办法,当我关掉shell终端之后,程序也还是可以继续运行的方法呢?肯定有,没有我就不会说了
nohup or screen ?
我推荐使用screen:(原因:喜欢,所以就用咯)
在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。

简而言之:
远程服务器的时候,断网或者手误关掉了远程终端,会导致会话中断,程序终止。而Screen连接的终端,会话独立运行,程序会一直进行。而且会话可以恢复,还可以自行删除。
安装配置
安装

yum install screen -y

参数说明:

-A    将所有的视窗都调整为目前终端机的大小。
-d    <作业名称>  将指定的screen作业离线。
-h    <行数>  指定视窗的缓冲区行数。
-m    即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r    <作业名称>  恢复离线的screen作业。
-R   先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s    <shell>  指定建立新视窗时,所要执行的shell。
-S    <作业名称>  指定screen作业的名称。
-v   显示版本信息。
-x   恢复之前离线的screen作业。
-ls或--list  显示目前所有的screen作业。
-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

创建screen终端

screen -R yourname

(换成中文理解时新建一个yourname的新窗口 建议名字更换成其它名字)
执行完之后,会发现当前窗口会变成一个screen窗口,在这里就可以运行我们的程序了
这个窗口是独立运行的,程序会一直进行
比如我还是要运行上面的xxx.jar,那么我可以这样

java -jar xxx.jar >> ./log.txt &

程序运行完你会发现和之前好像没有两样。别急,接着看
离开screen
按下ctrl+a+d,此时我们又回到了以前的shell终端里面,接着关闭shell
然后访问我们的程序,它居然还在运行,发生了什么?
打开shell,输入screen -ls,会发现我们刚刚创建的yourname,
进入yourname

screen  -R yourname

又回到了screen终端。。。
此时,你应该已经明白,创建的screen窗口是一个独立的,不中断的,这句话的含义。
如何结束它呢?
使用screen -ls,会显示所有的会话,每个会话前面都有相应的进程号。因此,直接

kill -9 进程号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值