1. Linux进程控制理论

① 进程是一个具有一定独立功能的程序的一次运行活动(动态性、并发性、独立性、异步性)。

  进程的四要素:

  (1)有一段程序供其执行(不一定是一个进程所专有的),就像一场戏必须有自己的剧本。
       (2)有自己的专用系统堆栈空间(私有财产)
       (3)有进程控制块(task_struct)(“有身份证,PID”)
       (4)有独立的存储空间。

  缺少第四条的称为线程,如果完全没有用户空间称为内核线程,共享用户空间的称为用户线程。

② 经典进程三态:阻塞、就绪、执行

备注:在同一时刻CUP运行的只有一个进程

③ 进程ID(PID):标识进程的唯一数字;父进程ID(PPID);启动进程的用户ID(UID)

④ 进程互斥:当有若干进程都要使用某一共享资源时,任何时候最多允许一个进程使用,其它要使用该资源的进程必须等待,知道占用该资源的进程释放了该资源为止

⑤ 临界资源:操作系统中将一次只允许一个进程访问的资源称为临界资源

⑥ 临界区:进程中访问临界资源的那段代码称为临界区。为实现对临界资源的互斥访问,应保证诸进程互斥的进入各自的临界区

⑦ 进程同步:一组并发进程按一定顺序执行的过程称为进程间的同步

⑧ 进程调度:按一定算法,从一组待运行的进程中选出一个来占有CPU运行

(1)调度方式:抢占式(A正在运行,B就绪,B优先级高,直接运行B)和非抢占式(A正在运行,B就绪,B优先级高,等A运行完再运行B)

(2)调度算法:先来先服务, 短进程优先, 高优先级优先,时间片轮转

⑨ 死锁:多个进程因竞争临界资源而形成的一种僵局

⑩ 获取ID

  pid_t getpid(void);  //获取本进程ID

  pid_t getppid(void);  //获取父进程ID

⑪ 进程创建:

  pid_t fork(void);  //创建子进程

  fork被调用一次,却返回两次,他可能有三种不同的返回值

  (1)在父进程中,fork返回新创建的子进程的PID

  (2)在子进程中,fork返回0

  (3)如果出现错误,fork返回一个负值

  注:fork后的代码由两个进程运行,即两个进程共享一段代码,但会拷贝一份数据,即子进程的数据空间、堆栈空间都会从父进程得到一份拷贝,而不是共享。

⑫ 进程创建的另一个函数:

  pid_t vfork(void)

⑬ exec函数族:用被执行的程序替换调用它的程序

⑭system函数:运行一条命令

(1)system原型:int system(const char* command);

(2)system简单实现:

int system(const char * cmdstring)
{
pid_t pid;
int status; if(cmdstring == NULL)
{
return (); //如果cmdstring为空,返回非零值,一般为1
} if((pid = fork()) < )
{
status = -; //fork失败,返回-1
}
else if(pid == )
{
execl("/bin/sh", "sh", "-c", cmdstring, (char *));
_exit(); // exec执行失败返回127,注意exec只在失败时才返回现在的进程,成功的话现在的进程就不存在啦~~
}
else //父进程
{
while(waitpid(pid, &status, ) < )
{
if(errno != EINTR)
{
status = -; //如果waitpid被信号中断,则返回-1
break;
}
}
} return status; //如果waitpid成功,则返回子进程的返回状态
}

⑮进程等待

  (1)pid_t wait(int* status);

  (2)pid_t waitpid((pid_t pid, int * status, int options);

2. Linux进程间通讯(无名管道和有名管道、信号、消息队列、共享内存、信号量、套接字)

最新文章

  1. 勤能补挫-简单But易错的JS&amp;CSS问题总结
  2. easy datagrid 按钮控制
  3. xhtml+css基础知识1
  4. Static Final用法
  5. 解决ERROR 2002 (HY000): Can&amp;#39;t connect to local MySQL server through socket &amp;#39;/tmp/mysql.sock&amp;#39; (2)
  6. context:annotation-config, mvc:annotation-driven, context:compont-scan 区别
  7. Session 的原理及最佳实践
  8. Python3.7 Scrapy crawl 运行出错解决方法
  9. 写一个小demo过程中遇到的各种问题 学生管理考勤系统(网页模拟)
  10. 【WP8】自定义EventAggregator
  11. ARM9通过NFS挂载根文件系统
  12. HDU 4643 GSM (2013多校5 1001题 计算几何)
  13. 红茶一杯话Binder (传输机制篇_下)
  14. Chrome自带恐龙小游戏的源码研究(四)
  15. oracle数据库表格操作
  16. RQNOJ 188 购物问题:树形dp
  17. Dash 使用
  18. sshd登录攻击
  19. 【CF1173D】NanuuAndCircle
  20. 洛谷 P1459 三值的排序 Sorting a Three-Valued Sequence

热门文章

  1. php学习笔记-关联数组
  2. 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-004希尔排序法(Shell Sort)
  3. 算法Sedgewick第四版-第1章基础-016一list
  4. 杭电ACM刷题(1):1002,A + B Problem II 标签: acmc语言 2017-05-07 15:35 139人阅读 评
  5. spark sql建表的异常
  6. python开发[第二篇]------str的7个必须掌握的方法以及五个常用方法
  7. Axure RP7.0移动互联网产品原型设计 中文pdf扫描版
  8. 答C++复杂多余者之惑
  9. jmeter 阶梯式加压测试
  10. 51nod - 1179 - 最大的最大公约数 - 枚举