1. 程式人生 > >Linux下C語言開發(已知程序名得到其PID號)

Linux下C語言開發(已知程序名得到其PID號)

在我的另外一個篇部落格【LinuxC語言開發(訊號signal處理機制)】中需要測試系統呼叫kill來向指定進行號傳送指定的訊號,在同一個測試檔案很容易獲取當前程序的pid,只需呼叫getpid()函式就可獲取當前程序的pid。但是,如果要獲取非當前程序的pid,那應該如何獲取呢?即我們需要在Linux C 程式中,已知其他程序的名字,來獲取其程序的pid。此時此刻我只能百度了,上網百度,找到兩種可行的方法:

1、通過popen建立一個管道,執行shell命令並得到返回結果

2、通過搜素/proc資料夾下的檔案內容,得到程序PID(這裡也可以學習下Linux C中如何讀取一個資料夾中的內容)

為了方便測試,隨便建立l一個progress.c檔案,檔案內容如下:


儲存後,輸入gcc progress.c -o progress將程式碼編譯為二進位制檔案progress,並使用./progress執行。當我們執行progress,由於程式中加了for(;;);死迴圈,這樣此進行就一直在執行著,方便我們來獲取progress程序的pid。

一、通過popen的方法

我們知道,在shell下可以通過下述命令來得到程序progress的pid:

ps -e | grep 'test' | awk 'print $1'

(注意:這個命令中,名字中含有progress字樣的程序都會被掃描到,如果只針對名字恰好為progress的程序,則需要修改這個命令)


那麼在Linux C 程式中,只要將這個命令移到shell環境中執行一下,並讀取其執行結果即可。在Linux C 程式中執行shell命令可以通過popen函式,該函式會返回一個檔案指標,可以向操作檔案一樣對這個返回的指標進行操作。

建立一個getOtherProgreessPid.c檔案,檔案內容如下:


儲存後,輸入gcc getOtherProgreessPid.c -ogetOtherProgreessPid將程式碼編譯為二進位制檔案getOtherProgreessPid,並使用./getOtherProgreessPid執行


二、通過搜素/proc資料夾下的內容獲取程序pid

在系統的/proc資料夾下,儲存有系統當前所有程序的資訊,比如一個程序的pid為10000,那麼/proc下會有一個名字為10000的資料夾,其中包含該程序的幾乎所有資訊:其中/proc/10000/cmdline檔案中儲存了啟動該程序時使用的命令列。

由於剛才的程序是通過./progress執行的,因此只要遍歷/proc下的資料夾,如果發現某個資料夾中的cmdline檔案內容為./progress,則該資料夾的名字即為該程序的pid。

重新新建了一個getOtherProgreessPid2.c,其getOtherProgreessPid2.c檔案內容如下:


儲存後,輸入gcc getOtherProgreessPid2.c -o getOtherProgreessPid2將程式碼編譯為二進位制檔案getOtherProgreessPid2,並使用./progress先執行progress程序,後在另外一個終端中使用./getOtherProgreessPid2執行getOtherProgreessPid2程序

歡迎關注並加入物聯網行業聯盟,積累行業人脈和資源。


相關推薦

LinuxC語言開發程序得到PID

在我的另外一個篇部落格【Linux下C語言開發(訊號signal處理機制)】中需要測試系統呼叫kill來向指定進行號傳送指定的訊號,在同一個測試檔案很容易獲取當前程序的pid,只需呼叫getpid()函式就可獲取當前程序的pid。但是,如果要獲取非當前程序的pid,那應該如何

LinuxC語言開發開篇hello world.

從大學選擇走嵌入式方向到現在從事嵌入式驅動工程師職位已一年多了,要能勝任嵌入式驅動工程師(當然,這裡我所說的嵌入式驅動工程師並非指驅動開發,往往只需要根據自己的系統移植驅動以及編寫簡單的驅動)確實需要不少知識,如:開發環境搭建、看懂簡單硬體電路原理圖、瞭解常用硬體工作原理、

Linux學習筆記 二 LinuxC語言開發工具

2.1常用編輯工具 1.vim編輯器 VIM編輯器基本山可分為三種模式分別是命令模式,插入模式和底行模式 下面是VIM模式轉換圖。 (1)在.vimrc檔案中設定幾個常用的底行命令 設定縮排命令    :set smartindent 

linux c++ 伺服器開發

苦逼的c++程式設計師還沒找到工作,所以順便開始寫伺服器練手。。     對內容不滿意不要噴我我是寫給自己看的(把自己犯得錯誤記下來) 1.我的電腦是win10的,所以先去網上下虛擬機器,我下載了 ,然後安裝了。 2.新建了一個ubuntu 32位的虛擬電腦。(我劃分的

linux C語言程式設計2——程序的建立,掛起,解掛,程序間通訊

在 linux 下利用C語言實現程序的建立,掛起和解掛操作 #include <stdio.h> #include <sys/stat.h> #include <sy

linuxC語言開發程序等待

                【 宣告:版權所有,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    所謂程序等待,其實很簡單。前面我們說過可以用fork建立子程序,那麼這裡我們就可以使用wait函式讓父程序等待子程序執行結束後才開始執行。注意,為了證明父程序確實是等

linuxC語言開發訊號處理

                【 宣告:版權所有,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    訊號處理是linux程式的一個特色。用訊號處理來模擬作業系統的中斷功能,對於我們這些系統程式設計師來說是最好的一個選擇了。要想使用訊號處理功能,你要做的就是填寫一個訊

Linux C程式設計之一:Linuxc語言開發環境

—恢復內容開始— 今天開始根據Linux C程式設計相關視訊的學習所做的筆記,希望能一直堅持下去。。。 1、開發環境的構成 編輯器:VI; 編譯器:選擇GNU C/C++編譯器gcc; 偵錯程式:應用廣泛的gdb; 函式庫:glibc ; 系統標頭檔案:glibc_header; 2、在安裝L

WindowsC語言開發環境配置:MinGW的簡介和安裝

Windows下C語言開發環境配置(一):MinGW的安裝和eclipse的配置 1.什麼是MinGW? MinGW即Minimalist GNU for Windows,是一個簡單Windows本地應用的開發環境。MinGW包含有一組GNU編譯器的集合(包

C++14系列1:LinuxC++14開發環境配置

g++安裝 當前Ubuntu的LTS版本為14.04,直接在apt-get命令安裝的g++到不了5.0版本,不能獲得全部的c++14的支援,所以必須安裝5.0以上版本的g++,這裡的方法如下: sudo add-apt-repository ppa:ub

linuxC語言程式設計日誌1:基於TCP協議的伺服器/客戶端程式

  基於TCP協議的伺服器/客戶端程式  首先我們看一下使用TCP協議進行網路通訊的程式基本模型:伺服器首先進行初始化操作:呼叫函式socket建立一個套接字,函式bind將這個套接字與伺服器的公認地址繫結在一起,函式listen將這個套接字換成傾聽套接字,然後呼叫函式acc

初學Linux---LinuxC語言中的陣列與指標

初學Linux(二)—Linux下C語言中的陣列與指標 在經過階段一的linux學習之後,我來到了階段二的Linux下的C語言程式設計,雖然學到目前linux下的C語言似乎跟之前學的C語言所差無幾,但是按照老師的話來說,C語言指標這塊尤為重要,而我在這一方面的

linuxC語言多執行緒執行緒的私有資料

二. 建立和登出 Posix定義了兩個API分別用來建立和登出TSD: int pthread_key_create(pthread_key_t *key, void (*destr_function) (void *)); 該函式從TSD池中分配一項,將其值賦給key供以後訪問使用。如果destr_fu

linuxC語言多執行緒執行緒的建立與取消

#include <pthread.h> int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void

linuxC語言操作mysql資料庫系統自帶版本3.23.54

      我的上一篇blog介紹了在linux環境下如何安裝配置系統自帶的mysql資料庫,並列舉了mysql的一些簡單的操作。接下來我將介紹一下如何利用mysql提供給我們的API來訪問並操作mysql資料庫(C語言)。 首先,我們需要安裝mysql-devel-3.23

LinuxC語言的幾道經典面試題

ref 使用 linu 學習資源 chan ima 什麽 img c語言 本篇文章整理了幾道Linux下C語言的經典面試題,相信對大家更好的理解Linux下的C語言會有很大的幫助,歡迎大家探討指正。 1、如果在Linux下使用GCC編譯器執行下列程序,輸出結果是什麽? 答

LINUXC語言編程調用其他函數、鏈接頭文件以及庫文件

blog head.s 鏈接 color pre () 如果 編譯 聲明 LINUX下C語言編程經常需要鏈接其他函數,而其他函數一般都放在另外.c文件中,或者打包放在一個庫文件裏面,我需要在main函數中調用這些函數,主要有如下幾種方法: 1.當需要調用函數的個數比較少時,

linuxc語言獲取當前時間

keyword spa pre urn markdown view 技術分享 時間 tle 和時間有關的函數定義在頭文件”time.h”中 常用函數: time_t time(time_t *t); 函數說明:此函數會返回從公元 1970 年1 月1 日的UTC

LinuxC語言的socket網絡編程

網絡編程 服務器 enter 編程 scanf 路由 client p s drl Server.c 1 #include <sys/types.h> 2 #include <sys/socket.h> 3 #include <n

LinuxC語言的文件操作

poi 需要 inux 文件 name fcn flag exc 文件描述符 代碼: 1 #include <stdio.h> 2 #include <string.h> 3 #include <fcntl.h> 4 /****