守护进程+线程基础__笔记,简洁

守护进程

  • daemon进程。通常运行与操作系统后台,脱离控制终端一般不与用户直接交互。周期性的等待某个事件发生或周期性执行某一动作。

  • 不受用户登录注销影响。通常采用以d结尾的命名方式。

守护进程的创建步骤

  • fork子进程,让父进程终止;
  • 子进程调用setsid()创建新会话;
  • 通常根据需要,改变工作目录位置chdir(),防止目录被卸载;
  • 通常根据需要,重设umask文件权限掩码,影响新文件的创建权限;
  • 通常根据需要,关闭/重定向文件描述符;
  • 守护进程业务逻辑。while();

线程

线程概念

  • 进程:有独立的进程地址空间,有独立的pcb。分配资源的最小单位。
  • 线程:有独立的pcb。没有独立的进程地址空间。最小单位的执行。

线程共享

  • 独享:栈空间(内核栈、用户栈)
  • 共享:共享全局变量

线程控制原语

  • pthread_t pthread_self(void);获取线程id,线程id是在进程地址空间内部,用来标识线程身份的id号。
    返回值:本线程id

  • int pthread_create(&tid,属性,指针函数名,函数参数);创建子线程
    返回值:成功:0,失败:errno

  • void pthread_exit(void *retval);退出当前线程
    retval:退出值。无退出值时,NULL
    exit():退出当前进程

    return:返回到调用者那里去

  • int pthread_join(pthread_t thread,void ※※retval) ;阻塞,回收线程,线程异常结束,值为-1
    thread:待回收的线程id
    retval:传出参数。回收的那个线程的退出值。
    返回值:成功:0,失败:errno

  • int pthread_detach(pthread_t thread);设置线程分离
    thread:待分离的线程id
    返回值:成功:0,失败:errno

  • int pthread_cancel(pthread_t pthread);杀死一个线程,需要到达取消点(保存点)
    返回值:成功:0,失败:errno
    如果,子线程没有到达取消点,那么pthread_cancel无效。
    pthread_testcancel(),手动添加取消点
    成功被pthread_cancel()杀死的进程,返回-1,使用pthread_join回收

线程属性

设置属性分离

  • pthread_attr_t attr 创建一个线程属性结构体变量
  • pthread_attr_init(&attr);初始化线程属性
  • pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACH);
  • pthread_create(&tid,&attr,函数名,函数参数);借助修改后的设置线程属性,创建线程
  • pthread_attr_destroy(&attr);销毁线程属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值