為了能方便的區分乙個程序中的每個執行緒,可以通過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...