进程的结束与线程

1.进程的结束

进程结束的方式:1)return 结束,main中的return 2) exit() 注册清理函数(atexit)  //库函数调用  3)_exit系统调用 4)主线程退出    5)主线程调用(pthread_exit(NULL))

异常终止:6)abort()   7)signal   kill pid   8) 最后一个线程被pthread_cancle

2.在exit函数中  ,调用atexit函数 

3.wait函数

功能:1.获取子进程退出状态 2 .回收资源(主要起到解决子进程僵尸态的问题)

注意:1.wait 本身是一个阻塞操作,,会使调用者阻塞 2.父进程要获得子进程的退出状态。

非阻塞调用:父进程会去查看子进程状态改变,但是,如果没有发生改变,父进程不阻塞,整个程序继续往下

非阻塞 必须 套在循环中处理

总结:1.wait 和 waitpid 都是 等待子进程状态改变

2.wait 是一种阻塞调用

3.waitpid 可以实现非阻塞调用

阻塞方式

2.线程

1.什么是线程

轻量级的进程,可一理解成进程的各个模块,一个进程可以包含多个线程,线程与线程之间是平等的,这是进程与线程的区别,这意味着主线程结束后,其他线程不会被强制结束。

2.线程的创建

pthread_create()

int pthread_create(pthread_t *thread, 
             const pthread_attr_t *attr,
             void *(*start_routine) (void *),
             void *arg);

   功能:该函数可以创建指定的一个线程。
    参数:
         @thread 线程id,需要实现定义并由该函数返回。
         @attr   线程属性,一般是NULL,表示默认属性。(可结合性+分离属性)
                 默认(可结合性) -- 自己手动回收
                 分离属性       -- 系统自动回收 
        @start_routine  -- 线程执行函数 (线程回调函数)
                //指向[指针函数的] 函数指针。
                  本质上是一个函数的名称即可。
                称为
                  th 回调函数,是线程的执行空间。
                  {
                  }
                //注: 线程回调函数 --完成线程任务功能的函数 
                //    需要调用者 自己实现
        @arg  回调函数的参数,即参数3的指针函数参数。
    返回值:成功 0
            失败 错误码     

示例:        

获得线程tid:
 pthread_self(); //在那个线程中调用,获得的就是那个线程的tid 
 

3.线程的退出

1)获取状态:pthread_join() 线程资源的回收 

2)结束进程:pthread_exit(),能够返回线程中特定的值,以返回地址的形式。但是线程结束后,它所开的栈的内容会自己销毁,所以对于需要从线程中通过pthread_exit返回的值需要自己开辟一个栈,通过 "  static "

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值