进程线程小结

1.进程:

1.1查看进程:

ps -ef/pstree/ps aux/top

1.2进程与程序的区别:

程序是静态的,是存储在磁盘上的一些指令的有序集合

进程是动态的,是程序运行的过程

1.3进程分类:

交互式进程:可以在前台运行,也可以在后台运行

批处理进程:不用和用户进行交互,一般在后台运行

守护进程:一直在后台运行,和终端没有关联,系统启动时开始执行,系统关闭时结束

1.4进程的状态:

运行态:R  进程当前正在运行

等待态:可中断等待态/S ,不可中断等待态/D

停止态:T  进程的执行被暂停

死亡态:X  最终的状态

僵尸态:Z  这是一个错误,由子进程退出父进程没有回收子进程资源造成

1.5创建进程

fork()/vfork()

fork():子进程拷贝父进程的代码段,数据段。vfrok()子进程和父进程共享数据段

fork():子进程父进程的执行顺序不定,vfork()保证子进程先执行,且只有当用exit()和_exit()使子进程退出后父进程才会执行

1.6进程退出

exit()和_exit()都可以使进程退出,但使用exit()可以正常打印程序的运行结果(自带清理缓冲区),_exit()不能正常打印,要借助其他可以刷新缓冲区的函数一起使用

1.7创建守护进程

1.7.1创建子进程,父进程退出   fork()  exit();

1.7.2设置新会话    setsid();

1.7.3设置工作目录     chdir("\tmp");

1.7.4重设文件掩码     umask();

1.7.5关闭子进程从父进程继承的文件描述符    getdtablesize

1.7.6周期性的执行

2.线程

2.1线程是轻量级的进程

2.2创建线程:pthread_create()    等待子线程的退出:pthread_join()

2.3线程中需要解决的问题:

2.3.1互斥:多线程不能同时访问临界资源

需要用到互斥锁:1.初始化互斥锁   pthread_mutex_init();   2.申请互斥锁pthread_mutex_lock()

3.关闭互斥锁   pthread_mutex_unlock();   4.销毁互斥锁pthread_mutex_destroy();

2.3.2同步:多线程在访问临界资源时,按一定顺序来访问

信号量:有名信号    多进程间

               无名信号   多线程间

               信号灯集   多进程间

初始化信号量:sem_init();    sem_wait();(P操作)   sem_post();(V操作)

3.无名管道:

创建无名管道:pipe(int fd[2])    fd[1]是固定读端,fd[1]是固定写段    是一个半双工的通信方式

写无名管道时要确保读端存在,不然会出现管道断裂的问题

4.有名管道:

创建有名管道:mkfifo();通过read/write实现对有名管道的读写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十三州府TD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值