首页 > 技术文章 > Linux Guard Service - 前台进程和后台进程切换

liutianchen 2018-03-03 23:47 原文

把一个正在执行的程序放入后台

[root@localhost 01]# Ctrl+Z

此使程序被移动到后台,但不能继续输出(处于暂停态)

[root@localhost 01]# ./test1-1 
1552227
1552227
1552227
1552227
^Z
[1]+  已停止                  ./test1-1
[root@localhost 01]# 
[root@localhost 01]# 
[root@localhost 01]# jobs
[1]+  已停止                  ./test1-1

让该后台程序继续在后台运行

[root@localhost 01]# bg %1
[1]+ ./test1-1 &
1552227
[root@localhost 01]# 1552227
1552227
1552227
^C

列出后台程序列表

[root@localhost 01]# jobs

显示已经进入后台的程序列表

[root@localhost 01]# jobs
[1]   已停止                  ./test1-1
[2]-  已停止                  ./test1-1
[3]+  已停止                  man jobs

其中+是倒数第一个后台进程,-是倒数第二个后台进程,前方是后台进程的序号

[root@localhost 01]# jobs
[1]-  已停止                  ./test1-1
[2]+  已停止                  ./test1-2

将某个特定后台程序切换到前台

[root@localhost 01]# fg %n

其中n是jobs列表中的后台进程序号

[root@localhost 01]# fg %1
./test1-1
1552227
1552227

查看父进程标识

[root@localhost 01]# ps f
   PID TTY      STAT   TIME COMMAND
 49561 pts/1    Ss     0:00 -bash
 49959 pts/1    T      0:00  \_ ./test1-1
 49960 pts/1    T      0:00  \_ ./test1-2
 49962 pts/1    R+     0:00  \_ ps f
  2496 tty1     Ss+    0:00 -bash

使用ps f以树形显示所有进程可以查看到test1-1 test1-2的父进程都是-bash

在新终端查看进程标识

[root@localhost ~]# ps f
   PID TTY      STAT   TIME COMMAND
 50060 pts/3    Ss     0:00 -bash
 50093 pts/3    R+     0:00  \_ ps f
 50010 pts/2    Ss+    0:00 -bash
 49561 pts/1    Ss+    0:00 -bash
 49959 pts/1    T      0:00  \_ ./test1-1
 49960 pts/1    T      0:00  \_ ./test1-2
  2496 tty1     Ss+    0:00 -bash

在新终端打开后test1-1和test1-2的父进程是pts/1 的-bash也就是旧终端,新终端的-bash是pts/3,此使用jobs没有test1-1和test1-2了

按Ctrl+D时登出终端

[root@localhost 01]# 登出

显示有停止的任务,再使用ps -ef查看列表,后台任务依然存在
再按一次Ctrl+D,终端已经登出,切换到另一个终端查看

Last login: Sun Oct 15 18:26:48 2017 from 192.168.80.1
[root@localhost ~]# ps -ef | grep test
root      49959      1  0 18:27 ?        00:00:00 ./test1-1
该进程被init进程收养后继续运行,称孤儿进程

直接把程序放到后台执行 &

[root@localhost 01]# ./test1-1 &

此使程序会自动在后台继续运行,并进行输出

[root@localhost 01]# ./test1-1 &
[1] 49856
[root@localhost 01]# 1552227
1552227

保持后台程序在终端结束后依然存在

使用守护进程让进程不以终端为父进程

daemon(0,0);

ps -ef 中的状态含义

D    不可中断     Uninterruptible sleep (usually IO)
R    正在运行,或在队列中的进程
S    处于休眠状态
T    停止或被追踪
Z    僵尸进程
W    进入内存交换(从内核2.6开始无效)
X    死掉的进程


<    高优先级
N    低优先级
L    有些页被锁进内存
s    包含子进程
+    位于后台的进程组;
l    多线程,克隆线程  multi-threaded (using CLONE_THREAD, like NPTL pthreads do)

推荐阅读