導航:首頁 > 文件類型 > linuxgetpid頭文件

linuxgetpid頭文件

發布時間:2023-06-27 17:31:04

『壹』 linux中pid gid tgid tid的區別和聯系

getpid : 取得process id,對於thread,就是取得線程對應進程的id;
對應的system call:
asmlinkage long sys_getpid(void)
1614 {
1615 return current->tgid;
1616 }
tgid = thread group id

/世返///////////////////////////散返迅/////////////////////////////////////////////

gettid:取沖此得線程id,如果是process,其實就等於getpid:
#define gettid() syscall(__NR_gettid)
對應的system call:
/* Thread ID - the internal kernel "pid" */
1761 asmlinkage long sys_gettid(void)
1762 {
1763 return current->pid;
1764 }

getgid:取得group id,就是user的group id
和用id命令得到的group id是一回事:
bash-3.1$ id
uid=3013(xxx) gid=300(xxxx) groups=300(xxxx),301(platform),505(fpgadrv),9022(gsm)

對於一個thread來說,在kenerl中可以看到他的process id(tgid),還可以看到他的thread id(pid)。

『貳』 如何用它在Linux的相對路徑打開一個文件

1. 如果程序不是由自己做,這是一個糟糕的計劃。糟糕的程序應包有一點的Bash腳本:#!/bin/bash
set -e
cd $(readlink -f $(dirname $0))
exec ./myprog $*

上面的腳本確定所在的目錄,然後更改當前工作目錄到該目錄並運行一個程序myprog從那裡,通過所有透明。你必須把這個腳本到你的程序所在的目錄,然後運行你的程序來代替它。 假設您有訪問源代碼並可以修復程序,proc文件系統來確定程序的位置和絕對路徑。 例如,/proc/self/exe將永遠是一個符號鏈接指向的當前進程的二進制文件。使用readlink讀取它的值 CodeGo.net,再切可執行文件和你得到的目錄。
2. 出現了問題,前一段時間如何找到在C中的可執行文件的位置 你打開你的配置,資源,等這個路徑..
3. 一種方法是ARGV [0]-有你的程序的相對路徑(例如./programs/test/a.out)。如果你切的程序,並添加到文件的相對路徑,你會得到一個怪物(例如./programs/test/../../input_data),但它應該工作。
4. 最簡單的方法是要麼把你的程序在一個預先知道的地方(/ bin中,/ usr / bin中,等)。如果沒有,你在argv [0],刪除該程序(最後一部分),作為你的工作目錄前綴的所有相對路徑(如果你想相對路徑是相對於你的程序是)。 此外,你可以決定你的上面(使用的路徑argv[0]),然後調用一個chdir()與此目錄。從此所有的相對路徑上是相對於所在的程序。但請注意,在這種情況下,你必須確定是否argv[0]占據絕對路徑。如果沒有,你必須得到當前工作目錄(getcwd()),然後追加的目錄部分argv[0]。但是,請注意,改變當前工作目錄。是不是一個好主意,通常情況下,彷彿給你一個文件路徑作為這將是相對於當前的工作目錄,而不是相對於所在的程序存儲。 例子:想像一下,你的程序在生活/usr/bin。你可以打電話給你的程序為:/usr/bin/myprog

(這將是argv[0]。trim的可執行文件,你有你的目錄。)或者,是,比方說,在/usr:./bin/myprog

現在,argv[0]是一個相對路徑。你必須在前面加上當前工作目錄(/usr)到一個在argv[0]:/usr/./bin/myprog,然後再次trim可執行文件的目錄將再次/usr/bin。
5. 唐的相對路徑。使用絕對路徑。你可能有一個config.h頭文件中定義的常量,指定安裝的可執行文件。然後,前置一個字元串常量到您在代碼中指定任何相對路徑。
6. openat打開相對於你傳遞一個特定的目錄文件描述符的文件,但我不認為這真的是你想要的(精確)什麼。 你將需要找到當前可執行文件的目錄,然後創建一個開放的呼叫相對於(使用字元串運算符來建立路徑,openat,或改變當前目錄到該目錄)。 為了找到可執行文件,可以readlink/proc/self/exe。readlink讀取路徑的符號鏈接指向,並/proc/self是一個符號鏈接/proc/<PID>哪裡<PID>是當前進程(在內核中處理特殊)的進程ID,以及exe以下是該進程的可執行文件的符號鏈接。然後,你需要掏錢的路徑的可執行文件,。 所有這一切都這么說,應該避免這樣一種方式,他們希望找到相對於其可執行文件的東西寫程序。
7. 好吧,如果你的程序需要從依賴安裝程序所在的位置打開一個文件時,你應該做這個選項。有你的編譯系統設置的CPP宏表示,其中有問題的數據文件,可以發現該目錄。這是什麼樣的-datadir的選項在標准配置「的configure,make,make install的」內置程序經常做。 當然,如果你真的想要,可以通過編程改變工作目錄與chdirPOSIX函數。但就像我說的,如果一個程序需要知道它位於何處,這應該是提供那麼你不需要重寫的選擇工作目錄中。
8. 您可以從確定執行路徑argv[0]但這樣做的時候要小心。 你所描述的是一個眾所周知的和預期的語義。用戶expect這種行為。
9. 下面是代碼,你要找到你的程序在你的安裝路徑(與你的程序替換「test0002」):#include <iostream>
#include <sstream>
#include <string>
#include <fstream>
#include <unistd.h>
///=============================================================================
std::string FindInstallPath()
{
std::string sret="";
int pid = (int)getpid();
bool b=false;
std::string sf, s;
std::stringstream ss;
ss << "/proc/" << pid << "/maps";
sf = ss.str();
std::ifstream ifs(sf.c_str());
size_t pos1, pos2;
while (!b && ifs.good())
{
std::getline(ifs, s);
if ((pos1 = s.rfind("test0002")) != std::string::npos)
{
if ((pos2 = s.find_first_of('/')) != std::string::npos)
sret = s.substr(pos2, pos1 - pos2);
b = true;
}
}
if (!b) sret = "";
ifs.close();
return sret;
}

『叄』 如何獲取linux內核線程的pid

通過查看資料,發現一種比較簡單的方法就是在代碼中使用printf將當前線程的id列印出來。
而這也分成兩種情況:
1. 如果是pthread,則使用,
#include <pthread.h>
pthread_t pthread_self(void);
2. 如果不是pthread,即是由內核創建的線程,則使用,
#include <sys/types.h>
pid_t gettid(void);
獲取線程所在的進程的id,方法如下:
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
pid_t getppid(void);
所以,我們在代碼中使用如下的語句列印:
printf("\ntid=%lu, pid=%lu\n", gettid(), getpid());
這樣就能獲取當前代碼所在的線程和進程了。
根據列印出來的進程的pid,獲取進程名的方法是:
ls -lh /proc/pid/exe
lrwxrwxrwx 1 root root 0 Jan 1 20:48 /proc/pid/exe -> ...
sh-3.2#
查看thread id的方法有:
1. sh-3.2# ps -efL | grep process,
ps命令指定-L命令選項可以用來查看進程下所包含的所有線程。
2. sh-3.2# ls -l /proc/pid/task/
查看進程下當前有哪些task,這些task指的就是線程。

『肆』 linux裡面的wait和waitpid是什麼

wait和waitpid的不同在於wait會令調用者阻塞直至某個子進程終止而waitpid則可以通過設置一個選項來設置為非阻塞,另外waitpid並不是等待第一個結束的進程而是等待參數中pid指定的進程。
waitpid提供了wait所沒有的三個特性:
1 waitpid使我們可以等待指定的進程
2 waitpid提供了一個無阻塞的wait
3 waitpid支持工作控制
具體可以查看APUE page202

『伍』 linux下getpid()的返回值問題

什麼編譯器?gcc4.1.2是一樣的。
另外你中間有什麼操作,父進程會成為孤兒進程掛在1上。

『陸』 linux 獲取進程id 函數

linux C中,獲取當前進程抄id 函數為getpid() ;

頭文件:#include<unistd.h>

函數原型:pid_tgetpid(void);

函數說明:getpid()用來取得目前進程的進程id,許多程序利用取到的此值來建立臨時文件,以避免臨時文件相同帶來的問題。

返回值:目前進程的進程id

範例
#include<stdio.h>
#include<unistd.h>
main()
{
printf("pid=%d ",getpid());
}

執行:
pid=1494/*每次執行結果都不一定相同*/
閱讀全文

與linuxgetpid頭文件相關的資料

熱點內容
dede工具 瀏覽:507
5g網盟app怎麼下載 瀏覽:486
微信備份老是連接中斷 瀏覽:886
出台多少份文件 瀏覽:380
鞋子怎麼搭配衣服的app 瀏覽:755
文件名使用的通配符的符號是什麼 瀏覽:916
lol分卷文件損壞怎麼辦 瀏覽:276
6分管車螺紋怎麼編程 瀏覽:732
海口農商銀行信用卡app是什麼 瀏覽:770
win10任務欄文件夾我的電腦 瀏覽:14
安卓nba2k18 瀏覽:776
文件夾密碼怎麼修改密碼 瀏覽:271
蘋果數據中心用什麼伺服器 瀏覽:769
省內圓通快遞寄文件夾需要多少錢 瀏覽:740
iphone程序加密 瀏覽:884
win10文件夾調整文件行高 瀏覽:681
創意手繪教程 瀏覽:754
微信刪除帳號信息 瀏覽:596
mysql操作類文件 瀏覽:649
繞過xp密碼 瀏覽:158

友情鏈接