linux断开线程命令 linux中断线程化

linux如何杀掉线程我们使用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
这样就批量杀掉筛选出的所有进程了
Linux线程的几种结束方式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线程的创建、退出、等待、取消、分离 返回值:成功: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环境高级程序设计》
linux结束进程命令有哪些linux 任务管理-后台运行与终止
fg、bg、jobs、、ctrlz命令
一、
加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp ,
二、ctrlz
可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可执行
三、jobs
查看当前有多少在后台运行的命令
jobs
-l选项可显示所有任务的PID,jobs的状态可以是running, stopped,
Terminated,但是如果任务被终止了(kill),shell
从当前的shell环境已知的列表中删除任务的进程标识;也就是说 , jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息;
四、fg
将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
五、bg
将一个在后台暂停的命令 , 变成继续执行 (在后台执行)
如果后台中有多个命令 , 可以用bg %jobnumber将选中的命令调出 , %jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
将任务转移到后台运行:
先ctrlz;再bg,这样进程就被移到后台运行,终端还能继续接受命令 。
概念:当前任务

果后台的任务号有2个,[1],[2];如果当第一个后台任务顺利执行完毕 , 第二个后台任务还在执行中时 , 当前任务便会自动变成后台任务号码“[2]”
的后台任务 。所以可以得出一点 , 即当前任务是会变动的 。当用户输入“fg”、“bg”和“stop”等命令时,如果不加任何引号,则所变动的均是当前任务
进程的终止
后台进程的终止:
方法一:
通过jobs命令查看job号(假设为num),然后执行kill %num
方法二:
通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid
前台进程的终止:
ctrl c
kill的其他作用
kill除了可以终止进程,还能给进程发送其它信号,使用kill -l 可以察看kill支持的信号 。
SIGTERM是不带参数时kill发送的信号,意思是要进程终止运行,但执行与否还得看进程是否支持 。如果进程还没有终止,可以使用kill -SIGKILL pid,这是由内核来终止进程 , 进程不能监听这个信号 。
进程的挂起
后台进程的挂起:
在solaris中通过stop命令执行,通过jobs命令查看job号(假设为num) , 然后执行stop %num;
在redhat中,不存在stop命令,可通过执行命令kill -stop PID,将进程挂起;
当要重新执行当前被挂起的任务时,通过bg %num 即可将挂起的job的状态由stopped改为running , 仍在后台执行;当需要改为在前台执行时,执行命令fg %num即可;
前台进程的挂起:
ctrl Z;
linux如何停止线程杀死线程 所在linux断开线程命令的进程就可以,
ps aux | grep 进程名
kill -TERM 进程号
如果linux断开线程命令你指的写程序,那就参考 man pthread_exit
linux下C中怎么让才能安全关闭线程多线程退出有三种方式:
(1)执行完成后隐式退出;
(2)由线程本身显示调用pthread_exit 函数退出;
pthread_exit (void * retval) ;
(3)被其他线程用pthread_cance函数终止:
pthread_cance (pthread_t thread) ;
用event来实现 。
在子线程中,在循环内检测event 。
while(!e.is_active())
{
...
}
当退出循环体的时候,自然return返回 。这样子线程会优雅的结束 。
注意:选用非等待的检测函数 。
pthread 线程有两种状态,joinable(非分离)状态和detachable(分离)状态,默认为joinable 。
joinable:当线程函数自己返回退出或pthread_exit时都不会释放线程所用资源,包括栈 , 线程描述符等(有人说有8k多,未经验证) 。
detachable:线程结束时会自动释放资源 。
Linux man page said:
When a joinable thread terminates, its memory resources (thread descriptor and stack) are not deallocated until another thread performs pthread_join on it. Therefore, pthread_join must be calledoncefor each joinable thread created to avoid memory leaks.
因此,joinable 线程执行完后不使用pthread_join的话就会造成内存泄漏 。
解决办法:
1.// 创建线程前设置 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);
2.当线程为joinable时,使用pthread_join来获取线程返回值 , 并释放资源 。
3.当线程为joinable时,也可在线程中调用 pthread_detach(pthread_self());来分离自己 。
【linux断开线程命令 linux中断线程化】关于linux断开线程命令和linux中断线程化的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读