`

进程控制学习笔记一

 
阅读更多

进程控制
进程的定义:
进程是一个程序的一次执行的过程,同时也是资源分配的最小单元
进程的特点:动态性、并发性、独立性、异步性
进程的状态:
1 就绪、阻塞、执行
2 TASK_RUNNING(运行)
TASK_INTERRUPTIBLE(可中断)
TASK_UNINTERRUPTIBLE(不可中断)
TASK_ZOMBIE(僵死)
TASK_STOPPED(停止)


进程id
进程id(pid) 标识进程的唯一数字
父进程id(ppid)
启动进程的用户id(uid)


进程开互斥
当有若干进程都要使用某一共享资源时,任何时刻最多允许一个进程使用,其他要
使用该资源的进程必须等待,直到占用该资源者释放了该资源为止




临界资源
一次只允许一个进程访问的资源称为临界资源

临界区
访问临界资源的那段程序代码称为临界区


进程的同步
一组并发进程按一定的顺序执行的过程


进程调度
按一定算法从一组待运行的进程中选出一个来占有cpu运行
调度方式:抢占式、非抢占式


调度算法
先来先服务
短进程优先
高优先级优先
时间片轮转法


死锁
多个进程因竞争资源而形成的一种僵局,进程不能向前推进


进程控制编程


获取id
getpid()


#include <unistd.h>
pid_t getpid(void)
获取父进程序id
pid_t getppid(void)




进程创建
#include <unistd.h>
pid_t fork(void)
三种不同的返回值
在父进程中,返回子进程的pid
在子进程中,返回0
如果出现错误,返回一个负值




示例代码如下:
#include <unistd.h>
#include <stdio.h>


int main(void){
pid_t pid;
int count=0;
pid=fork;
printf("count=%d\n",count);
return 0;
}
运行结果:
count=1
count=1


子进程的数据空间、堆栈空间都会从父进程得到一个拷贝

#include <sys/types.h>
#include <unistd.h>
pid_t vfork(void)


fork和vfork的区别
1 fork 子进程拷贝父进程的数据段
vfork 子进程与父进程共享数据段
2 fork 父子进程的执行顺序不确定
vfork 子进程先运行,父进程后运行


exec函数族
exec用被执行的程序替换调用它的程序
与fork的区别:
fork是创建一个新的进程,产生一个新的pid
exec启动一个新程序,替换原有的进程,此进程的pid不会改变






#include <unistd.h>
int execl(const char *path,const char *arg1,...)
用来执行path字符串所代表的文件路径
arg1:被执行程序所需的命令行参数,含程序名,以空指针结束


示例代码如下:
#include <unistd.h>
main(){
execl("/bin/ls","ls","-al","/etc/passwd",(char *)0);
}






#include <unistd.h>
int execlp(const char *path,const char *arg1,...)
path:被执行程序名(不含路径名,将从path环境变量中查找该程序)
arg1:被执行程序所需的命令行参数,含程序名,以空指针结束
示例代码如下:
#include <unistd.h>
main(){
execl("ls","ls","-al","/etc/passwd",(char *)0);
}




#include <unistd.h>
int execv(const char *path,char *const argv[])
path:被执行程序名(含完整路径)
argv[]:被执行程序所需的命令行参数数组


#include <unistd.h>
main(){
char *argv[]={"ls","-al","/etc/passwd",(char *)0};
execl("/bin/ls",argv);
}




#include <unistd.h>
int execvp(const char *file,char *const argv[])




#include <stdlib.h>
int system(const char *string)
调用fork产生子进程,由子进程来调用/bin/sh -c string 来执行参数string所代表的命令
示例代码如下:
#include <unistd.h>
main(){
system("ls -al /etc/passwd");
}




进程等待
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status)
阻塞该进程,直到其某个子进程退出
示例代码如下:
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>


void main(){
pid_t pc,pr;
pc=fork();
if(pc==0){/*如果是子进程*/
printf("this is child process with pid of %d\n",getpid());
sleep(10);/*睡眠10分钟*/
}else if(pc>0){/*如果是父进程*/
pr=wait(NULL);/*等待*/
printf("i catched a child process with pid of %d\n",pr);
}
exit(0);
}

分享到:
评论

相关推荐

    linux 进程控制阅读笔记

    本人学习 Linux进程编程时整理的,介绍Linux进程的创建,到守护进程的创建步骤。还有有关进程控制的参考资料

    【SystemVerilog】路科验证V2学习笔记(全600页).pdf

    SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 ...

    Linux学习笔记【博文整理系列】

    学习linux的笔记,发到博文了,鉴于文档方便保存和查阅,发出来,免费的哈 博文来自http://blog.csdn.net/wklken,共12篇,类似手册,可快速练习和查阅,容易上手 文档列表: Linux笔记——vim常用操作及扩展补充...

    Linux初级学习笔记

    Linux学习笔记,主要包括:LINUX下寻求帮助,文件相关命令,系统命令初步,Linux编辑器的使用,进程控制等

    net学习笔记及其他代码应用

    3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。 答:public class MainClass { public static void Main() { Console.WriteLine(Foo(30)); } public static ...

    unix上课学习笔记.txt

    4管理进程: 程序 静态的 进程 启动程序成了进程,每个进程都对应程序的唯一标识 线程 一个进程对应多个线程 5控制系统硬件和程序(驱动) 6管理守护进程 运行在后台,系统启动时启动,系统关闭时关闭 7管理...

    Shell脚本学习笔记

    第1章 BashShell命令 6 1.1 Shell提示符 6 1.2 文件与目录Shell命令 7 1.2.1 更改目录命令(cd) 7 1.2.2 列表命令(ls) 7 1.2.3 操作文件命令 10 1.2.4 目录处理命令 14 1.2.5 查看文件内容命令 15 1.3 监控程序 20 ...

    oracle管理学习笔记

    oracle的服务=实例+数据库 实例=后台进程+sga(内存) 数据库=数据文件+控制文件+日志文件 .......

    日志管理Log4j学习笔记

    Log4j 是 Apache 的一个开放源代码项目,通过使用 Log4j ,我们可以控制日志信 送的目的地是控制台、文件、 GUI 组件、甚至是套接口服务器、 NT 的事件记录器、 X Syslog 守护进程等;我们也可以控制每一条日志的...

    linux网络编程学习笔记

    telnet是一个用来远程控制的程序,但是我们完全可以用这个程序来调试我们的服务端程 序的. 比如我们的服务器程序在监听 8888 端口,我们可以用 telnet localhost 8888来查 看服务端的状况. TCP(Transfer Control ...

    corejava的学习笔记

    -proc:{none,only} 控制是否执行注释处理和/或编译。 -processor &lt;class1&gt;[,,&lt;class3&gt;...] 要运行的注释处理程序的名称;绕过默认的搜索进程 -processorpath &lt;路径&gt; 指定查找注释处理程序的位置 -d &lt;目录&gt; 指定...

    基础学习笔记 java整合技术 java工具类.rar

    应用:科学计算、数据处理、自动控制、计算机辅助设计、人工智能、网络等领域。 硬件及冯诺依曼结构 计算机硬件 组成:CPU,主板,内存,电源,主机箱,硬盘,显卡,键盘、鼠标,显示器。 软件及软件开发 计算机软件...

    .net技术资料大全(语言规范 源码教程 学习笔记 技术资料 .net代码生成器)

    C#学习 01_类.htm.txt 02_构造函数的执行序列.htm.txt 03_抽象类和接口.htm.txt 04_结构类型.htm.txt 05_类成员的定义.htm.txt 06_类成员的其他议题.htm.txt 07_接口的执行.htm.txt 08_集合.htm.txt 09_...

    Java并发编程(学习笔记).xmind

    进程 资源分配的最小单位 线程 CPU调度的最小单位 线程的优势 (1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 (2)建模简单:通过使用线程可以讲复杂并且...

    Kubernetes架构学习笔记

    Master节点负责整个集群的控制和管理,所有的控制命令都是发给它,上面运行着一组关键进程:kube-apiserver:提供了HTTPREST接口,是k8s所有资源增删改查等操作的唯一入口,也是集群控制的入口。 kube-contr

    整理后java开发全套达内学习笔记(含练习)

    程序, 进程 ['prɒses] protected (关键字) 受保护的,私有的 [prә'tektid] provide v.规定(供应,准备,预防)[prә'vaid] refer to v.引用 [ri'fә:][tu:] reference n. 参考(引用,涉及)['refәrәns]' --&gt;...

    ROOTKIT专题的研究

    3)shadow ssdt学习笔记 4)高手进阶windows内核定时器之一 5)高手进阶windows内核定时器之二 6)运行期修改可执行文件的路径和Command Line 7)查找隐藏驱动 8)装载驱动的几种办法 9)内核中注入dll的一种...

    linux-2.6.24:linux kernel 2.6.24原始代码分析和学习笔记

    主要内容包括多任务,调度和进程管理,物理内存的管理以及内核与相关硬件的交互,用户空间的进程如何访问虚拟内存,如何编写设备驱动程序,模块机制以及虚拟文件系统,Ext文件系统属性和访问控制表的

    ASP升级.net资料大全(c#入门 语言规范 源码教程 学习笔记 技术资料 面试题 asp与.net代码生成器)

    C#学习 01_类.htm.txt 02_构造函数的执行序列.htm.txt 03_抽象类和接口.htm.txt 04_结构类型.htm.txt 05_类成员的定义.htm.txt 06_类成员的其他议题.htm.txt 07_接口的执行.htm.txt 08_集合.htm.txt 09_...

Global site tag (gtag.js) - Google Analytics