Linux下指定執行緒的名字

2022-05-26 05:12:11 字數 1069 閱讀 9975

為了能方便的區分乙個程序中的每個執行緒,可以通過prctl()給每個執行緒取個名字。這樣在會建立多個執行緒的程式執行過程中,就能知道乙個pid或tid對應的是哪個執行緒,對除錯程式有一定幫助。

prctl是個系統呼叫,可以用來讀取和更改乙個執行緒的屬性。其使用者態介面定義如下:

#include int prctl(int option, unsigned long arg2, unsigned long arg3,unsigned long arg4, unsigned long arg5);
第乙個引數option用來告訴prctl要對當前執行緒做什麼操作,針對不同的操作,後面需要的引數個數也不同。

其中用來獲取和修改當前執行緒名字的option是下面兩個:

pr_set_name:設定當前執行緒的名字

pr_get_name:獲得當前執行緒的名字

這兩個option都只需要乙個引數,即用來儲存執行緒名的字串:

int prctl(int option, unsigned long arg2);
對於arg2有如下要求:

pr_set_name:arg2存放將要設定的執行緒名的字元指標,即(char *)arg2。名字的長度最大為15位元組,且應該以'\0'結尾。如果傳入的字串長度大於15位元組,則字串將被截斷。

pr_get_name:arg2需要是乙個已經分配空間的字元指標,且長度不小於16。prctl成功返回後,arg2被賦值為當前執行緒名,以'\0'結尾。

prctl()執行成功返回0,失敗返回-1,並設定errno。

注:prctl()只能設定/獲取當前執行緒的名字,在glibc 2.12之後的版本中提供了兩個擴充套件的介面pthread_setname_np()和pthread_getname_np(),可以在程序中設定和讀取其他執行緒的名字。

**示例:

#include#include#include void*  thread1(void* arg)

}int main()

這樣就可以將執行緒的名稱設定為「thread1」。

linux下postgresql新增指定使用者資料庫

啟動linux,開啟命令列,我的psql是自動啟動的,無需手動start。之前在網上看到的一種建立資料庫的方法 createdb bili u postgres 當初以為是建立乙個所有者為postgres的資料庫bili。但今天再次應用時才發現,這種方法貌似是只能建立預設登入角色的postgres的...

linux 下開放指定埠

安裝tomcat後,在客戶端輸入位址http serveraddress 8080,發現預設埠8080不能訪問。由於linux防火牆預設是關閉8080埠。因此,若要能夠訪問8080埠,可以用兩種方式,乙個是關閉防火牆,另乙個就是讓防火牆開放8080埠。開放8080埠的解決步驟如下 a rh fire...

Linux 下開放指定埠

安裝tomcat後,在客戶端輸入位址 http localhost 8080 發現預設埠8080不能訪問。由於linux防火牆預設是關閉8080埠。因此,若要能夠訪問8080埠,可以用兩種方式,乙個是關閉防火牆,另乙個就是讓防火牆開放8080埠。開放8080埠的解決步驟如下 a rh firewal...