殺死線程 所在的進(jìn)程就可以,
創(chuàng)新互聯(lián)建站從2013年開(kāi)始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元荊州做網(wǎng)站,已為上家服務(wù),為荊州各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
ps aux | grep 進(jìn)程名
kill -TERM 進(jìn)程號(hào)
如果你指的寫程序, 那就參考 man pthread_exit
Linux線程的幾種結(jié)束方式
Linux創(chuàng)建線程使用
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine)(void *), void *arg)
1
2
Linux線程的幾種結(jié)束方式:
調(diào)用pthread_exit(exit_code),exit_code為線程退出的狀態(tài)代碼。同一進(jìn)程下的其他線程可以通過(guò)pthread_join(exit_code)來(lái)使用。
函數(shù)start_routine使用return返回,與調(diào)用pthread_exit()作用相同。
線程被取消pthread_cancel()。
同一進(jìn)程中的其他線程調(diào)用了exit(),,或者主線程從main函數(shù)返回。
我們使用linux時(shí)遇到端口占用,在了解占用程序影響不大的情況下,會(huì)通過(guò)netstat命令找到占用端口的進(jìn)程,直接kill掉
查找端口占用命令:
netstat -tnlp | grep 80
可以看到,進(jìn)程id為20902的進(jìn)程占用了80端口
我們可以選擇使用命令 kill pid 殺掉進(jìn)程
kill 20902
或者使用kill -9 pid 強(qiáng)殺進(jìn)程
kill -9 20902
如果你需要?dú)⒌羲泻Y選結(jié)果下的進(jìn)程可以使用
ps -aux|grep name|awk '{print $2}'|xargs kill -9
其中name是你要查詢的服務(wù)名稱,例如我要查nginx的所有服務(wù)可以使用
ps -aux|grep nginx
我們要篩選出第二項(xiàng)pid
ps -aux|grep name|awk '{print $2}'
篩選出后要?dú)⒌暨@些進(jìn)程
ps -aux|grep name|awk '{print $2}'|xargs kill -9
這樣就批量殺掉篩選出的所有進(jìn)程了
執(zhí)行完成后隱式退出
由線程本身顯示調(diào)用pthread_exit 函數(shù)退出;
pthread_exit (void * retval)
被其他線程用pthread_cance函數(shù)終止:
pthread_cance (pthread_t thread)
解決辦法:
// 創(chuàng)建線程前設(shè)置 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);
當(dāng)線程為joinable時(shí),使用pthread_join來(lái)獲取線程返回值,并釋放資源。
當(dāng)線程為joinable時(shí),也可在線程中調(diào)用 pthread_detach(pthread_self());
返回值:成功:0,錯(cuò)誤:出錯(cuò)編號(hào)。
pthread不是Linux系統(tǒng)默認(rèn)的庫(kù)而是POSIX線程庫(kù)。在Linux中將其作為一個(gè)庫(kù)來(lái)使用,因此編譯時(shí)需要加上-pthread以顯式鏈接該庫(kù)
返回線程ID
線程標(biāo)識(shí)符在進(jìn)程中是唯一的,即分別屬于兩不同進(jìn)程的兩個(gè)線程可能有相同的線程標(biāo)識(shí)符
retval:返回信息
參數(shù)表:
thread: 要等待的線程的pid
retval:用來(lái)存儲(chǔ)被等待線程的返回值
返回0:成功;返回錯(cuò)誤號(hào):失敗
主線程阻塞自己,等待子線程結(jié)束,然后回收子線程資源
可以設(shè)置線程能否被取消和取消后是否立即執(zhí)行
參數(shù)表
state:PTHREAD_CANCEL_DISABLE或者PTHREAD_CANCEL_ENABLE
oldstate:指針類型,上一次取消狀態(tài)的指針,可設(shè)NULL
type:PTHREAD_CANCEL_ASYNCHRONOUS立即取消
PTHREAD_CANCEL_DEFERRED等待事件(如pthread_join時(shí))才取消
在任何一個(gè)時(shí)間點(diǎn)上,線程是可結(jié)合的(joinable),或者是分離的(detached)。一個(gè)可結(jié)合的線程能夠被其他線程收回其資源和殺死,只有當(dāng)pthread_join()函數(shù)返回時(shí),創(chuàng)建的線程才算終止,才能釋放自己占用的系統(tǒng)資源;在被其他線程回收之前,它的存儲(chǔ)器資源(如棧)是不釋放的。相反,一個(gè)分離的線程是不能被其他線程回收或殺死的,它的存儲(chǔ)器資源在它終止時(shí)由系統(tǒng)自動(dòng)釋放。 因此為了避免內(nèi)存泄漏,所有線程的終止,要么已設(shè)為DETACHED,要么就需要使用pthread_join()來(lái)回收
返回0成功,錯(cuò)誤號(hào)失敗
分離后不可以再合并。該操作不可逆
綜合以上要想讓子線程總能完整執(zhí)行(不會(huì)中途退出),
注:很多地方參照了黃茹老師主編的《Linux環(huán)境高級(jí)程序設(shè)計(jì)》