扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
杀死线程 所在的进程就可以,
创新互联建站从2013年开始,是专业互联网技术服务公司,拥有项目成都网站建设、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元荆州做网站,已为上家服务,为荆州各地企业和个人服务,联系电话:18980820575
ps aux | grep 进程名
kill -TERM 进程号
如果你指的写程序, 那就参考 man pthread_exit
Linux线程的几种结束方式
Linux创建线程使用
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine)(void *), void *arg)
1
2
Linux线程的几种结束方式:
调用pthread_exit(exit_code),exit_code为线程退出的状态代码。同一进程下的其他线程可以通过pthread_join(exit_code)来使用。
函数start_routine使用return返回,与调用pthread_exit()作用相同。
线程被取消pthread_cancel()。
同一进程中的其他线程调用了exit(),,或者主线程从main函数返回。
我们使用linux时遇到端口占用,在了解占用程序影响不大的情况下,会通过netstat命令找到占用端口的进程,直接kill掉
查找端口占用命令:
netstat -tnlp | grep 80
可以看到,进程id为20902的进程占用了80端口
我们可以选择使用命令 kill pid 杀掉进程
kill 20902
或者使用kill -9 pid 强杀进程
kill -9 20902
如果你需要杀掉所有筛选结果下的进程可以使用
ps -aux|grep name|awk '{print $2}'|xargs kill -9
其中name是你要查询的服务名称,例如我要查nginx的所有服务可以使用
ps -aux|grep nginx
我们要筛选出第二项pid
ps -aux|grep name|awk '{print $2}'
筛选出后要杀掉这些进程
ps -aux|grep name|awk '{print $2}'|xargs kill -9
这样就批量杀掉筛选出的所有进程了
执行完成后隐式退出
由线程本身显示调用pthread_exit 函数退出;
pthread_exit (void * retval)
被其他线程用pthread_cance函数终止:
pthread_cance (pthread_t thread)
解决办法:
// 创建线程前设置 PTHREAD_CREATE_DETACHED 属性
pthread_attr_t attr;
pthread_t thread;
pthread_attr_init (attr);
pthread_attr_setdetachstat(attr, PTHREAD_CREATE_DETACHED);
pthread_create (thread, attr, thread_function, NULL);
pthread_attr_destroy (attr);
当线程为joinable时,使用pthread_join来获取线程返回值,并释放资源。
当线程为joinable时,也可在线程中调用 pthread_detach(pthread_self());
返回值:成功: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环境高级程序设计》
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流