檢查進程存在的5種方法

檢查進程存在的五種方法:

  1. 通過wait()函數來監控: 這種方法只適用於父子進程之間,父進程可以使用該函數對子進程進行監控
  2. 信號量和文件鎖: 如果某個進程一直持有某個信號量或者文件鎖,並且該文件鎖或者信號量一直處於被監控狀態,那麼當可以獲取到信號量和文件鎖的時候說明該進程已經終止
  3. 進程間IPC通信機制: 可以通過進程間通信的某些機制來實現對某一個進程的監控,比如FIFO,可以給被監控進程管道的讀端,當寫端寫入失敗的時候,說明該進程也已經結束,還可以通過socket,讓被監控進程和監控進程間建立socket,監控該socket的連接狀態就可以知道被監控進程有沒有退出
  4. 查看/prco/PID: 通過這種方式可以調用stat()等函數實現對進程的查看
  5. kill(pid,0): 通過向被監控進程發送sigid 爲0的信號,若返回失敗且errno爲ESRCH說明該進程不存在

注意:4、5兩種方法有可能存在一定的風險,因爲linux系統會重用進程ID,當被監控進程終止後,linux進程可能重用該進程ID,所以監控的可能不是之前的進程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章