把一个正在执行的程序放入后台
[[email protected] 01]# Ctrl+Z
此使程序被移动到后台,但不能继续输出(处于暂停态)
[[email protected] 01]# ./test1-1
1552227
1552227
1552227
1552227
^Z
[1]+ 已停止 ./test1-1
[[email protected] 01]#
[[email protected] 01]#
[[email protected] 01]# jobs
[1]+ 已停止 ./test1-1
让该后台程序继续在后台运行
[[email protected] 01]# bg %1
[1]+ ./test1-1 &
1552227
[[email protected] 01]# 1552227
1552227
1552227
^C
列出后台程序列表
[[email protected] 01]# jobs
显示已经进入后台的程序列表
[[email protected] 01]# jobs
[1] 已停止 ./test1-1
[2]- 已停止 ./test1-1
[3]+ 已停止 man jobs
其中+是倒数第一个后台进程,-是倒数第二个后台进程,前方是后台进程的序号
[[email protected] 01]# jobs
[1]- 已停止 ./test1-1
[2]+ 已停止 ./test1-2
将某个特定后台程序切换到前台
[[email protected] 01]# fg %n
其中n是jobs列表中的后台进程序号
[[email protected] 01]# fg %1
./test1-1
1552227
1552227
查看父进程标识
[[email protected] 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
在新终端查看进程标识
[[email protected] ~]# 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时登出终端
[[email protected] 01]# 登出
显示有停止的任务,再使用ps -ef查看列表,后台任务依然存在
再按一次Ctrl+D,终端已经登出,切换到另一个终端查看
Last login: Sun Oct 15 18:26:48 2017 from 192.168.80.1
[[email protected] ~]# ps -ef | grep test
root 49959 1 0 18:27 ? 00:00:00 ./test1-1
该进程被init进程收养后继续运行,称孤儿进程
直接把程序放到后台执行 &
[[email protected] 01]# ./test1-1 &
此使程序会自动在后台继续运行,并进行输出
[[email protected] 01]# ./test1-1 &
[1] 49856
[[email protected] 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)