操作系统中,前台进程和后台进程有什么区别?特征是什么?

后台程序基本上不和用户交互,优先级别稍微低一点

前台的程序和用户交互,需要较高的响应速度,优先级别稍微高一点

直接从后台手工启动一个进程用得比较少一些,除非是该进程甚为耗时,且用户也不急着需要结果的时候。假设用户要启动一个需要长时间运行的格式化文本文件的进程。为了不使整个shell在格式化过程中都处于“瘫痪”状态,从后台启动这个进程是明智的选择。

LINUX后台进程与前台进程的区别

LINUX后台进程也叫守护进程(Daemon),是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。

一般用作系统服务,可以用crontab提交,编辑或者删除相应得作业。

守护的意思就是不受终端控制。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。

前台进程就是用户使用的有控制终端的进程

shell下,进程的前台与后台运行

跟系统任务相关的几个命令:fg、bg、jobs、&、ctrl+z

1. & 最经常被用到

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

2. ctrl + z

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

3. jobs

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

4. fg

将后台中的命令调至前台继续运行

如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

5. bg 将一个在后台暂停的命令,变成继续执行

如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

1. jobs列举出后台作业信息。([作业号]   运行状态   作业名称)

2. ctrl+z 将任务放到后台去,并暂停;

3. bg  将后台任务唤醒,在后台运行;

4. fg   将后任务的程序放到前台;

1.  ctrl+z 将任务放到后台去,并暂停.

主进程waitpid(pid,&status,WUNTRACED)时,子进程

退出时,父进程被唤醒

2.  将后台任务唤醒,在后台运行;

kill(pid,SIGCONT);

3.  将后台运行的程序放到前台;

kill(pid,SIGCONT);

waitpid(pid,&status,WUNTRACED);

//可见,后台运行与前台运行的区别只在于前台运行等待子进程的退出而阻塞父进程操作。而后台运行时,可以在父进程中输入命令继续其他操作。本质上没有区别,都是给子进程发送SIGCONT信号。

Configure 参数选项

1 –prefix=- Nginx安装路径。如果没有指定,默认为 /usr/local/nginx。

--help  查看帮助文档

Linux 自启动程序

下面用自启动apache为例:

有两种方法可以让Apache在系统启动时自动启动

1. 在/etc/rc.d/rc.local中增加启动apache的命令,例如:/usr/local/httpd/bin/apachectl start

2. 将apache注册为系统服务

首先将apachectl命令拷贝至/etc/rc.d/init.d目录下,改名为httpd

使用编辑器打开httpd文件,并在第一行#!/bin/sh下增加两行文字如下

# chkconfig: 35 70 30

# description: Apache

接着注册该服务

chkconfig –add httpd

一切OK了,启动服务

service httpd start

其中所增加的第二行中三个数字第一个表示在运行级别3和5下启动apache,第二、三是关于启动和停止的优先级配置,无关紧要。

在Red Hat Linux中自动运行程序

1.开机启动时自动运行程序

Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。init根据配置文件继续引导过程,启动其它进程。通常情况下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目录下的脚本文件,可以使init自动启动其它程序。例如:编辑 /etc/rc.d/rc.local 文件,在文件最末加上一行”xinit”或”startx”,可以在开机启动后直接进入X-Window。

2.登录时自动运行程序

用户登录时,bash首先自动执行系统管理员建立的全局登录script :/etc/profile。然后bash在用户起始目录下按顺序查找三个特殊文件中的一个:/.bash_profile、/.bash_login、 /.profile,但只执行最先找到的一个。

因此,只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序

3.退出登录时自动运行程序

退出登录时,bash自动执行个人的退出登录脚本/.bash_logout。例如,在/.bash_logout中加入命令”tar -cvzf c.source.tgz *.c”,则在每次退出登录时自动执行 “tar” 命令备份 *.c 文件。

4.定期自动运行程序

Linux有一个称为crond的守护程序,主要功能是周期性地检查 /var/spool/cron目录下的一组命令文件的内容,并在设定的时间执行这些文件中的命令。用户可以通过crontab 命令来建立、修改、删除这些命令文件。

例如,建立文件crondFile,内容为”00 9 23 Jan * HappyBirthday”,运行”crontab cronFile”命令后,每当元月23日上午9:00系统自动执行”HappyBirthday”的程序(”*”表示不管当天是星期几)。

Linux启动细节:

1)redhat的启动方式和执行次序是:

加载内核

执行init程序

/etc/rc.d/rc.sysinit # 由init执行的第一个脚本

/etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式

/etc/rc.d/rc.local     #相应级别服务启动之后、在执行该文件(其实也可以把需要执行的命令写到该文件中)

/sbin/mingetty # 等待用户登录

在Redhat中,/etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作,包括:

调入keymap以及系统字体

启动swapping

设置主机名

设置NIS域名

检查(fsck)并mount文件系统

打开quota

装载声卡模块

设置系统时钟

/etc/rc.d/rc则根据其参数指定的运行模式(运行级别,你在inittab文件中可以设置)来执行相应目录下的脚本。凡是以Kxx开头的,都以stop为参数来调用;凡是以Sxx开头的,都以start为参数来调用。调用的顺序按xx从小到大来执行。(其中xx是数字、表示的是启动顺序)例如,假设缺省的运行模式是3,/etc/rc.d/rc就会按上述方式调用/etc/rc.d/rc3.d/下的脚本。

值得一提的是,Redhat中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中

的最后一个,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登录之前执行的命令。

init在等待/etc/rc.d/rc执行完毕之后(因为在/etc/inittab中/etc/rc.d/rc的action是wait),将在指定的各个虚拟终端上运/sbin/mingetty,等待用户的登录。

至此,LINUX的启动结束。

)init运行级别及指令

一、什么是INIT:

init是Linux系统操作中不可缺少的程序之一。

所谓的init进程,它是一个由内核启动的用户级进程。

内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。

内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。

二、运行级别

那么,到底什么是运行级呢?

简单的说,运行级就是操作系统当前正在运行的功能级别。这个级别从1到6 ,具有不同的功能。

不同的运行级定义如下

# 0 – 停机(千万不能把initdefault 设置为0 )

# 1 – 单用户模式                                     # s   init s = init 1

# 2 – 多用户,没有 NFS

# 3 – 完全多用户模式(标准的运行级)

# 4 – 没有用到

# 5 – X11 多用户图形模式(xwindow)

# 6 – 重新启动 (千万不要把initdefault 设置为6 )

这些级别在/etc/inittab 文件里指定。这个文件是init 程序寻找的主要文件,最先运行的服务是放在/etc/rc.d 目录下的文件。在大多数的Linux 发行版本中,启动脚本都是位于 /etc/rc.d/init.d中的。这些脚本被用ln 命令连接到 /etc/rc.d/rcn.d 目录。(这里的n 就是运行级0-6)

3):chkconfig 命令(redhat 操作系统下)

不像DOS 或者 Windows,Linux 可以有多种运行级。常见的就是多用户的2,3,4,5 ,很多人知道 5 是运行 X-Windows 的级别,而 0 就是关机了。运行级的改变可以通过 init 命令来切换。例如,假设你要维护系统进入单用户状态,那么,可以使用 init 1 来切换。在 Linux 的运行级的切换过程中,系统会自动寻找对应运行级的目录/etc/rc[0-6].d下的K 和 S 开头的文件,按后面的数字顺序,执行这些脚本。对这些脚本的维护,是很繁琐的一件事情,Linux 提供了chkconfig 命令用来更新和查询不同运行级上的系统服务。

语法为:

chkconfig –list [name]

chkconfig –add name

chkconfig –del name

chkconfig [--level levels] name

chkconfig [--level levels] name

chkconfig 有五项功能:添加服务,删除服务,列表服务,改变启动信息以及检查特定服务的启动状态。

chkconfig 没有参数运行时,显示用法。如果加上服务名,那么就检查这个服务是否在当前运行级启动。如果是,返回 true,否则返回false。 –level 选项可以指定要查看的运行级而不一定是当前运行级。

如果在服务名后面指定了on,off 或者 reset,那么 chkconfig 会改变指定服务的启动信息。on 和 off 分别指服务在改变运行级时的启动和停止。reset 指初始化服务信息,无论有问题的初始化脚本指定了什么。

对于 on 和 off 开关,系统默认只对运行级 3,4, 5有效,但是 reset 可以对所有运行级有效。指定 –level 选项时,可以选择特定的运行级。

需要说明的是,对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init 不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。

选项介绍:

–level levels

指定运行级,由数字 0 到 7 构成的字符串,如:

–level 35 表示指定运行级3 和5。

要在运行级别3、4、5中停运 nfs 服务,使用下面的命令:chkconfig –level 345 nfs off

–add name

这个选项增加一项新的服务,chkconfig 确保每个运行级有一项 启动(S) 或者 杀死(K) 入口。如有缺少,则会从缺省的init 脚本自动建立。

–del name

用来删除服务,并把相关符号连接从 /etc/rc[0-6].d 删除。

–list name

列表,如果指定了name 那么只是显示指定的服务名,否则,列出全部服务在不同运行级的状态。

运行级文件

每个被chkconfig 管理的服务需要在对应的init.d 下的脚本加上两行或者更多行的注释。

第一行告诉 chkconfig 缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用 – 代替运行级。

第二行对服务进行描述,可以用 跨行注释。

例如,random.init 包含三行:

# chkconfig: 2345 20 80

# description: Saves and restores system entropy pool for

# higher quality random number generation.

表明 random 脚本应该在运行级 2, 3, 4, 5 启动,启动优先权为20,停止优先权为 80。

好了,介绍就到这里了,去看看自己目录下的/etc/rc.d/init.d 下的脚本吧。

2. 实例介绍:

1、在linux下安装了apache 服务(通过下载二进制文件经济编译安装、而非rpm包)、apache 服务启动命令:  /server/apache/bin/apachectl start    。让apache服务运行在运行级别3下面。  命令如下:

1)touch /etc/rc.d/init.d/apache

vi /etc/rc.d/init.d/apache

chown -R root /etc/rc.d/init.d/apache

chmod 700 /etc/rc.d/init.d/apache

ln -s /etc/rc.d/init.d/apache /etc/rc.d/rc3.d/S60apache   #S 是start的简写、代表启动、K是kill的简写、代表关闭。60数字代表启动的顺序。

apache的内容:

#!/bin/bash

#Start httpd service

/server/apache/bin/apachectl start

至此 apache服务就可以在运行级别3下 随机自动启动了。(可以结合chkconfig 对启动服务进行相应的调整)

linux 主进程 等待,Linux启动与进程相关推荐

  1. linux shell 脚本 父子进程 等待子进程,SHELL父子进程分析

    导言 本节将就shell交互(脚本执行)过程中涉及子进程(subprocess)以及子SHELL(subshell)的部分,配以实例,进行说明.将详细讨论如下问题:subprocess和subshel ...

  2. linux主分区表丢失,linux修复丢失的分区表

    先模拟破快分区表 dd if=/dev/zero of=/dev/vdb bs=512 count=1 然后先使用 parted尝试修复 parted /dev/vdb GNU Parted 2.1 ...

  3. linux之《进程等待》

    文章目录 引言 一,fork() 1. 常规用法 2. 它和写时拷贝的关系 二,进程终止 1. 退出码 2. exit()和_exit()的关系 三,进程等待 1. 什么是进程等待 2. 为什么要进程 ...

  4. linux终端关闭时为什么会导致在其上启动的进程退出?

    现象 经常在linux下开发的人应该都有这样的经验,就是在终端上启动的程序,在关闭终端时,这个程序的进程也被一起关闭了.看下面这个程序,为了使进程永远运行,在输出helloworld后,循环调用sle ...

  5. 【Linux】进程创建、进程终止、进程等待

    目录 一.进程创建 1.1 深入 fork 函数 1.2 写时拷贝 二.进程终止 2.1 进程退出码 2.2 exit 与 _exit 三.进程等待 3.1 进程等待必要性 3.2 进程等待 3.2 ...

  6. Linux:进程管理 | 进程创建 | 进程终止 | 进程等待 | 进程替换

    文章目录 进程创建 fork 写时拷贝机制 进程终止 退出码 进程退出方法 进程等待 阻塞.非阻塞的等待 进程替换 替换函数 exec l exec lp exec le exec ve exec v ...

  7. 【Linux进程控制】进程创建 | 进程终止 | 进程等待 | 进程替换

    [写在前面] 本文主要学习理解 fork 的返回值.写时拷贝的工作细节.为什么要存在写时拷贝:进程退出码.进程退出的场景及常见的退出方法.对比 man 2 _exit 和 man 3 exit:进程终 ...

  8. 【Linux】进程终止与进程等待/僵尸进程与孤儿进程

    进程终止:简单来说就是如何退出一个进程 在main函数中可以直接采用return退出(在普通函数中return只能退出函数而不能退出进程) 在函数任意位置调用 ==viod exit(int stat ...

  9. linux内核的进程管理,Linux内核设计与实现——进程管理

    主要内容 进程 进程描述符及任务结构 进程创建 线程在linux中的实现 进程终结 1. 进程 进程不仅仅是一段可执行程序代码,还包含其他资源,如打开的文件,挂起的信号,内核内部数据,处理器状态,一个 ...

最新文章

  1. 怎么查交集_胃镜要不要查?
  2. python3.8.1安装教程-python3.8.1 安装
  3. 【C++】 C++标准模板库(十二) 迭代器和STL
  4. linux找不到动态链接库 .so文件的解决方法
  5. springboot转发http请求_如何实现Http请求报头的自动转发
  6. 保时捷服务器连接不到车辆信息,检修保时捷老款卡宴无法启动故障
  7. Git中如何利用生成SSH个人公钥访问git仓库
  8. Flutter实战一Flutter聊天应用(十六)
  9. cli命令行配置路由器_2.3.3 使用CLI执行基本路由器配置
  10. 1.深入理解计算机系统---计算机系统漫游
  11. 7-8-无向图的关节点-图-第7章-《数据结构》课本源码-严蔚敏吴伟民版
  12. C语言快速找答案,C语言单选题找答案
  13. 实战分享声卡效果调试都用那些效果器插件
  14. 文法俱乐部 第一章 基本句型及补语
  15. MEMS传感器的下一轮技术变革
  16. Win系统 - 如何查看电脑有几个内存条插槽?
  17. 扫描项目中的二维码关注微信公众号
  18. 国漫的又一次崛起?形成独树一帜的“中国学派”
  19. ArcGIS数据降雨量插值
  20. 向量叉乘求三维空间中两直线(或线段)的交点

热门文章

  1. python网上授课_python完整课程
  2. java applet 记事本_jsb java编写的安卓app记事本程序,适合app初学者 Applet 243万源代码下载- www.pudn.com...
  3. 不同年龄段给狗狗起名字,我命中了,你呢?
  4. 阿里云发布云电脑“无影”,「传统桌面云」市场将被颠覆?
  5. 你知道 URL 后面的这些 utm_xxx 参数都是干嘛的吗?
  6. 什么?终止一个容器竟然用了 10 秒钟,这不能忍!
  7. 赛森机器人_对比评测3款最贵的扫地机器人,戴森性能太强了
  8. arcface mxnet转onnx
  9. yolov5训练自己的数据
  10. pytorch模型转换