linux线程的创建、退出、等待、取消、分离

linux线程的创建、退出、等待、取消、分离,第1张

返回值:成功:0,错误:出错编号。

pthread不是Linux系统默认的配拦数库而是POSIX线程库。在Linux中将其作为一个库来使用,因此编译时需要加上-pthread以显式链接该库

返回线程ID

线程标识符在进程中是唯一的,即分别属于两不同进程的两个线程可能有相同的线程标识符

retval:返回信息

参数表:

thread: 要等待的线程的pid

retval:用来存储被等待线程的返回值

返回0:成功;返回错误号:失败

主线程阻塞自己,等待子线程结束,然后回收子线程资源

可以设置线程能否被取消和取消后是否立即执行

参数表

state:PTHREAD_CANCEL_DISABLE或者PTHREAD_CANCEL_ENABLE

oldstate:指针类型,上一次取消状态的指针,可设NULL

type:PTHREAD_CANCEL_ASYNCHRONOUS立即取消

PTHREAD_CANCEL_DEFERRED等待事件(如pthread_join时)才取消

在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死,只有当pthread_join()函数返回时,创建的线程才算终止,才能释放自己占用的系统资源;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。 因此为了避免内存泄衡友漏,所有线程的终止,要么已设为DETACHED,要么就需要使用pthread_join()来回收

返回0成功,错误号失败

分离后不可以再合并。该 *** 作不可逆

综合以上要想让子线程总能完整执行(不会中途退出),

注:很多地方参照培首了黄茹老师主编的《Linux环境高级程序设计》

第一个问题,不管是创建进程或者创建线程都不会阻塞,创建完毕马上返回不会等待子进程或者子线程的运行

第二个问题

首先进程和线程是不一样的

多进程时,父进程如果先结束,那么子进程会被init进程接收成为init进程的子进程,接下来子进程接着运行,直到结束,init进程负责轿晌取得这些子进程的结束状态并释放进程资源。而如果是子进程先结束,那么父进程应当用wait或者waitpid去获取子进程的结束状态并释放进程资源,否则子进程会成为僵死进程,它占用的闭陪锋进程资源不会释放

多线程时,如果父线程或者说你讲的main结束时使用return或者exit或者处理完毕结束,那么整个进程都结束,其他子线程自然结束。如果main结束时使乱神用的是pthread_exit那么只有父线程结束,子线程还在运行。同样对于子线程结束时如果调用了exit,那么整个进程包括父线程结束,如果调用了pthread_exit或者正常结束,那么只有子线程结束。

另外子线程结束时如果没有分离属性,其他线程应当使用pthread_join去获取线程结束状态并释放线程资源,如同进程里的wait和waitpid

1、linux下用ssh登陆后退出主要有两个命令,Logout和exit。首先使用工具登录一台linux服务器,这里使用ssh登录:

2、首先使用Logout命令尝试退出ssh,这晌裤里可以看到程序是直接退出的,并且会在屏幕上打印出Connection closed by foreign host:

3、最后是使用exit命令尝试退出,这里的效果和用Logout命令退出是一样的宴卜简,当然exit命令弊粗比较短,输入也相对方便一些。以上就是ssh退出登录的方法:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12498258.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存