本文收集整理关于程序和进程是一一对应的的相关议题,使用内容导航快速到达。
内容导航:
Q1:有关进程的说法正确的是( ) A、进程即程序 B、进程可以理解为程序的一次执行 C、进程是静止的 D、进程只
B
Q2:是不是一个程序只能对应一个进程?一个大的程序是不是分为若干个进程来执行?
你可以打开你的任务管理器看看svchost.exe程序就对应着多少进程,在XP中,四个svchost.exe进程算少的,因为它对应着多个不同的系统服务,所以你这一个程序只对应一个进程的说法是不成立的。是否一个程序对应一个进程要看程序的设计,多数程序允许同时启动它的多个窗口,这时也往往会出现多个同样程序名称的进程。
Q3:一天一点学习Linux之RHEL6系统进程管理之一任务管理
1、先来简单的来理解一下程序与进程的相关概念
程序:供用户使用的一些二进制文件。
进程:程序运行后,被加载到内存中与其相关的一些信息。如进程标识PID、内存占用率等等。
程序是静态的概念,本身作为一种软件资源长期保存,而进程是程序的执行过程,他是动态概念,有一定的生命期,是动态产生和消亡的。
程序和进程无一一对应关系。一个程序可以由多个进程共用。另一方面,一个进程在活动中有可顺序地执行若干个程序。
父进程:程序运行时候的第一个进程可以理解为父进程
子进程:由程序进程衍生出来的进程称为子进程
当父进程终止时,子进程也随之而终止。但子进程终止,父进程并不一定终止。
2、任务管理
工作管理是在Bash环境下,在单一终端机接口下同时进行多个工作的行为管理。比如在登陆Bash后,要同时编译软件、复制文件、编辑文件等等,这就是用到工作任务管理了。当然,你也可以多打开几个终端来同时进行上述的工作,但毕竟,终端有时候会被用完,或者是使用数量或连接数受到限制,有可能只能打开一个终端来为你工作。
这里面我们还需要来了解一下什么是前台进程与后台进程。
前台:如在shell提示符输入命令后,创建一个子进程,运行命令,shell等待命令退出,然后返回到对用户给出提示符。这条命令与shell异步运行,即在前台运行,用户在空完成之前,不能执行另外一个命令。
后台:如在shell提示符输入命令后,若后面跟随一个&,shell创建的子进程运行此命令,但不等待命令退出,而直接返回到对用户的提示。这条命令与shell同步运行,即在后台运行。但后台进程必须是非交互式的。而后后台的进程是不能用Ctrl+c来终止的。
相关的命令
把命令放到后台运行,就是在命令的后面加上&
进程的暂停与终止
暂停:Ctrl+z
终止:Ctrl+c
进程的恢复
恢复到前台继续运行:fg
恢复到后台继续运行:bg
查看后台进程:jobs
下面我们来举个例子
[root@yufei ~]# cp -r /usr/ /tmp &
[1] 1627
这里就是把复制的命令放到后台来操作了,他的PID是1627,任务编号是1
[root@yufei ~]# jobs
[1]+ Running cp -i -r /usr/ /tmp &
查看到命令正在运行中
如果把命令调到前台,就用下面的命令
[root@yufei ~]# fg %1
cp -i -r /usr/ /tmp
用Ctrl+z把此命令丢到后台并让其暂停
^Z
[1]+ Stopped cp -i -r /usr/ /tmp
查看任务情况
[root@yufei ~]# jobs
[1]+ Stopped cp -i -r /usr/ /tmp
让其继续工作
[root@yufei ~]# bg %1
[1]+ cp -i -r /usr/ /tmp &
我们看到任务就继续进行了
[root@yufei ~]# jobs
[1]+ Running cp -i -r /usr/ /tmp &
如果任务执行完成后,再用jobs来查看的话,是有个Done提示
[root@yufei ~]# jobs
[1]+ Done cp -i -r /usr/ /tmp
特别注意:就算程序被放到后台执行,但如果您的终端断掉的话,后台执行的程序同样会中断。为了解决这个问题,可以通过下面的方法来完善。
1、用计划任务来实现(这个就不多说了,因为很常见)
2、用nohup:格式nohup [指令与参数] &
[root@yufei ~]# nohup cp -r /usr/ /tmp &
[1] 1699
[root@yufei ~]# nohup: ignoring input and appending output to `nohup.out
[root@yufei ~]# jobs
[1]+ Running nohup cp -r /usr/ /tmp &
[root@yufei ~]# exit
再重新登陆一下
[root@yufei ~]# jobs
这时候是看不到东西的,但用ps就能发现了
ps -efgrep cp
root 1699 1 10 22:14 ? 00:00:06 cp -r /usr/ /tmp
这个进程ID还是1699哦,和上面的是一样的。这就说明我们虽然终端退出来了,但任务没有中断,依然在继续执行中
摘自 羽飞博客
Q4:进程是什么概念?它们和对应的应用程序的联系如何区分?
对应用程序来说,进程就像一个大容器。在应用程序被运行后,就相当于将应用程序装进容器里了,你可以往容器里加其他东西(如:应用程序在运行时所需的变量数据、需要引用的DLL文件等),当应用程序被运行两次时,容器里的东西并不会被倒掉,系统会找一个新的进程容器来容纳它。
进程是由进程控制块、程序段、数据段三部分组成。一个进程可以包含若干线程(Thread),线程可以帮助应用程序同时做几件事(比如一个线程向磁盘写入文件,另一个则接收用户的按键操作并及时做出反应,互相不干扰),在程序被运行后中,系统首先要做的就是为该程序进程建立一个默认线程,然后程序可以根据需要自行添加或删除相关的线程。是可并发执行的程序。在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位,也是称活动、路径或任务,它有两方面性质:活动性、并发性。进程可以划分为运行、阻塞、就绪三种状态,并随一定条件而相互转化:就绪--运行,运行--阻塞,阻塞--就绪。
进程是操作系统结构的基础;是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实体;由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。
进程为应用程序的运行实例,是应用程序的一次动态执行。看似高深,我们可以简单地理解为:它是操作系统当前运行的执行程序。在系统当前运行的执行程序里包括:系统管理计算机个体和完成各种操作所必需的程序;用户开启、执行的额外程序,当然也包括用户不知道,而自动运行的非法程序(它们就有可能是病毒程序)。
危害较大的可执行病毒同样以“进程”形式出现在系统内部(一些病毒可能并不被进程列表显示,如“宏病毒”),那么及时查看并准确杀掉非法进程对于手工杀毒有起着关键性的作用。