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如何停止線程
殺死線程 所在的進程就可以,
ps aux | grep 進程名
kill -TERM 進程號
如果你指的寫程序, 那就參考 man pthread_exit
③ 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線程的幾種結束方式
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函數返回。