前台、后台、守护进程
更多资料下载,冲击月薪过万,一线经验工程师录制,
干货满满的嵌入式视频教程,请点击淘宝店:wanglitao.taobao.com
运行的进程分为前台进程和后台进程。
前台进程会绑定并占用一个终端(键盘、显示器、串口等),接受用户的输入,并将打印输出到终端。也有一些特殊的程序不需要跟用户打交道,不用跟用户进行交互,比如网站服务进程,主要用来处理HTTP请求,不需要跟当前用户进行交互,就不需要占用终端了,这个进程可以转到后台去执行,这样的进程也称为后台进程。
后台进程不需要绑定和占用终端,它独立于终端并周期性地执行某种任务(如杀毒)或等待处理某种请求(网页访问HTTP请求、SSH登录请求)。当我们运行一个命令,在命令后面加一个 &,就可以让整个程序在后台运行,整个进程也就变成了后台进程。
#include <stdio.h>
#include <unistd.h>
int main(void)
{
while(1)
{
printf("hello zhaixue.cc\n");
sleep(1);
}
return 0;
}
为了演示前后台进程,我们编写一个简单的C程序,如上所示,每隔1秒,循环打印字符串:hello zhaixue.cc,编译上面的程序并运行。
# gcc main.c -o a.out
# ./a.out
hello zhaixue.cc
hello zhaixue.cc
hello zhaixue.cc...
因为前台进程会绑定和占用终端,所以程序会一直讲字符串打印到屏幕,我们可以使用Ctrl+z将该进程放到后台,暂停运行。此时我们可以通过jobs命令查看后台的进程:
hello zhaixue.cc
^Z
[1] + 11578 suspended ./a.out
# jobs
[1] + suspended ./a.out
此时a.out进程就由前台进程变成了后台进程,并暂停运行。此时我们可以通过bg或fg命令,在后台运行这个进程,或者将任务放到前台执行。
# bg %1
# fg %1
其中的%1编号指的是使用jobs命令得到的后台进程索引编号。
Linux后台进程也称为守护进程(daemon),Linux的大多数服务器都是用守护进程实现的。守护进程独立于终端在后台运行,用于执行特定的任务。Linux系统在启动时,会从启动脚本/etc/rc.d中启动一些列后台服务,这些服务的名称通常是以*d结尾。
# ps -A | grep d
1 ? 00:00:11 systemd
2 ? 00:00:00 kthreadd
6 ? 00:00:00 kworker/0:0H-kblockd
10 ? 00:00:00 ksoftirqd/0
11 ? 00:00:18 rcu_sched
18 ? 00:00:00 ksoftirqd/1
24 ? 00:00:00 kauditd
26 ? 00:00:00 khungtaskd
30 ? 00:00:00 ksmd
31 ? 00:00:02 khugepaged
78 ? 00:00:00 kintegrityd
79 ? 00:00:00 kblockd
84 ? 00:00:00 md
TIPS:上面的a.out进程,虽然放在后台运行了,但是程序输出还是一直打印在屏幕上,智慧如你,想一想这是什么原因?
《Linux三剑客》视频教程,从零开始快速掌握Linux开发常用的工具:Git、Makefile、vim、autotools、debug,免费赠送C语言视频教程,C语言项目实战:学生成绩管理系统。详情请点击淘宝链接:Linux三剑客