從dkfdtf 「列舉系統程序及呼叫模組
」中簡化出:
clear
?checkexerun('vfp9.exe')
?checkexerun('excel.exe') *
檢測某個程式是否在程序中執行
function
checkexerun
#define
#define
error_no_more_files18
lparameters
tcexename
declare long
getlasterror
in win32api
&&獲取最後錯誤**值
declare long
createtoolhelp32snapshot
in win32api ;
&&建立程序快照
long
dwflags,
long
th32processid
declare long
process32first
in win32api
long
hsnapshot,
string
@ lppe
declare long
process32next
in win32api
long
hsnapshot,
string
@ lppe
declare long
closehandle
in win32api
long
hobject
local
lnhss,lcbuff,lnpid,lnsize,llstate,lcprogname
&&if lnhss = -1
return
.f.
endif
lnsize = 8 * 4 + 260
*bintoc(4 + lnsize,'rs')
結構長度(二進位制),+ 7個dword + 1上long 8 * 4(dword和longs均4個位元組) char szexefile[max_path] max_path(260)
*詳細內容參考msdn的processentry32 結構
lcbuff =
bintoc
(4 + lnsize,'rs') +
replicate
(chr
[0],lnsize)
if process32first(lnhss,@lcbuff) = 0
&&從快照中獲取第乙個程序,若為0則關閉快照並返回
closehandle(lnhss)
return
.f.
endif
do while
.t. *
將二進位制(9-12中的4個位元組)轉為數值獲取程序標識(pid)
lnpid =
ctobin
(substr
(lcbuff,9,4),'rs')
lcprogname =
lower
(justfname
(getimgfile(lnpid,0)))
&&根據pid獲取對應映像程式(exe)
if lcprogname ==
lower
(tcexename)
llstate = .t.
exit
endif
lcbuff =
bintoc
(4 + lnsize,'rs') +
replicate
(chr
[0],lnsize)
*獲取下乙個程序,若為0或獲取錯誤則退出迴圈
if process32next(lnhss,@lcbuff) = 0 or error_no_more_files == getlasterror()
exit
endif
enddo
closehandle(lnhss)
&&關閉控制代碼
return
llstate
endfunc
*根據程序id獲取對應的映像名(.exe)
procedure
getimgfile
#define
process_vm_read0x0010
#define
process_query_information0x0400
#define
process_all_access
0x001fffff
*接收傳入引數
lparameters
tnpid,thmodule
*定義相關api函式
declare long
openprocess
in win32api ;
&&開啟程序物件
long
dwdesiredaccess,
long
binherithandle,
long
dwprocessid
declare long
getmodulefilenameex
in psapi ;
&&獲取某個程序對應檔案的完全路徑名
long
hprocess,
long
hmodule,
string
@ lpexename,
long
dwsize
if tnpid = 0
return
''
endif
local
lnhproc,lcfile,lnsize
*根據tnpid標識,從記憶體中讀取乙個程序,並查詢程序資訊,lnhproc為該程序控制代碼
lnhproc = openprocess(process_vm_read + process_query_information,0,tnpid)
if lnhproc = 0
return
''
else
lnsize = 260
lcfile =
replicate
(chr
[0],lnsize)
*根據lnhproc程序控制代碼,獲取該程序檔案的完全路徑及檔名
lnsize = getmodulefilenameex(lnhproc,thmodule,@lcfile,lnsize)
closehandle(lnhproc)
lcfile =
leftc
(lcfile,lnsize)
endif
return
lcfile
endproc
參考資料:http://blog.csdn.net/dkfdtf/archive/2008/07/05/2614284.aspx
用Linux守護程序檢測某個程式是否執行
實現功能 做的乙個嵌入式板子開機會自啟動乙個程式,但發現它工作數天後會退出。檢查記憶體使用並沒有洩漏,於是編寫了乙個守護程序來不斷檢查程式是否執行,沒執行則執行它,這是乙個折衷的辦法。說明 需要執行的程式是alarminte ce,位於目錄 rf 下面。我做了乙個指令碼duijiang來啟動這個al...
用Linux守護程序檢測某個程式是否執行
用linux守護程序檢測某個程式是否執行 環境 主機 fedora12 目標板 sc6410 目標板linux核心版本 2.6.36 實現功能 做的乙個嵌入式板子開機會自啟動乙個程式,但發現它工作數天後會退出。檢查記憶體使用並沒有洩漏,於是編寫了乙個守護程序來不斷檢查程式是否執行,沒執行則執行它,這...
檢測某個php程序執行狀態shell
一.主要shell bin bash executepath readlink f dirname 0 executelog readlink f executepath check.log envpath readlink f executepath env.sh source envpath s...