您的位置:首页 > 运维架构 > Linux

玩玩Linux云主机-linux后台运行和关闭、查看后台任务,关闭终端后继续执行

2016-12-07 20:23 731 查看
就在刚刚啊,笔者redis-server 的时候就遇到了这个问题,前台和后台的问题还是有必要了解的,一会细细道来。

1. 前台和后台的概念

这个和操作系统有关了,由于操作系统多核的概念出来之后啊,简单的同步执行已经不满足需求了,所以有了多任务,共享CPU,并发执行,可能说的不太对,大概就是这意思。有的时候呢,耗时任务比较大的,或者比如定时任务等等,不能一直等着他执行啊,必须放在后台,不是在Linux的shell中执行,前台呢,就是直接的在shell中执行,关闭shell的窗口就停止了,但是后台的还是继续的执行,这个就是概念。

2. 终端的概念

这个也是有点意思,就是呢,我们的电脑只要开着,这个资源大家共享,只是多了一个显示的屏幕而已,只要有人在登录,也就可以使用。比如有个root用户 有个 wangwang 用户,同时登录,这个时候两者并不会受到影响的。

3. &

加在一个命令的最后,可以把这个命令放到后台执行,如

ps -ef |grep redis 先看看进程,把之前的关闭
kill 进程号
redis-server &




4. jobs

查看当前有多少在后台运行的命令

jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。



5. CTRL+Z

可以将一个正在前台执行的命令放到后台,并且处于暂停状态。

先查看当前的后台进程 jobs
然后查看资源的使用情况 top
然后让这个前台进程暂停 CTRL+Z
在此看看  jobs
下面演示一下






可以看出来了,当前的状态处于停滞的状态

6. CTRL+C 直接的终止了,这个之前其实说明过

前后台间切换

7. fg(foreground 前台)

将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用 fg %jobnumber(是命令编号,不是进程号)将选中的命令调出。



这里就是把一个后台的进程放在前台来执行呢



8. bg

将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。

redis-server 启动服务
CTRL+Z 暂停
然后启动 bg 让redis在后台继续进行




9. 笔者来演示一下笔者遇到的问题,之前呢开启redis之后呢,笔者按住了CTRL+Z让这个暂停了,然后打开redis-cli客户端



因为从Jobs可以知道当前的redis为暂停状态,所以一直都看不到get数据得到,数据库都暂停了怎么能够获取得到数据呢?!哈哈 这个坑就是笔者不知道这些细节,所以笔者就写了这篇文章,说白了,就是增加我的记忆吧,哈哈,下次好好的会议,记忆深刻。

10. 最后一个讲解终端问题。 nohup(后台作业) 只要在前面加上就好了

在终端启动程序关闭终端不退出的方法,很简单的一个root,一个wangwang 。

wangwang在他的终端开启了一个后台进程 redis-server &

怎么保证 wangwang关闭了,这个进程还是没有关闭呢??

如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。关闭中断后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)

ps -aux   #a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分


又是一个非常好的实践啊,没事自己动手,可以发现很多未知的奥妙,不动不知道,移动吓一跳。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: