1. 程式人生 > >殺死程序kill和fuser

殺死程序kill和fuser

1 kill -9 id

2   不行的話使用    fuser -k -SIGHUP /opt/bre/cookiemapping/wsapi/123 

fuser有一個特別的用法在於它可以一次殺死那些正在訪問指定檔案的程序

一,為什麼要使用fuser?
   先說 fuser的作用,
   fuser能識別出正在對某個檔案或埠訪問的程序
   大家想一下,還有哪個命令具備這個功能?
   沒錯,是lsof,
   我們前面講過, lsof能夠找出正在對指定檔案訪問的程序,
   那麼它們兩者之間有何區別?
   fuser有一個特別的用法在於它可以一次殺死那些正在訪問指定檔案的程序


二,如何使用fuser?

   1,如何用fuser得到正在使用指定檔案的程序?


     用法: fuser 檔案
     說明:它會把正在使用當前檔案的程序id列出

     [[email protected] lhd]# umount /
     umount: /: device is busy.
           (In some cases useful info about processes that use
            the device is found by lsof(8) or fuser(1))
     [[email protected] lhd]# fuser /
      /:                       1rc     2rc     3rc     4rc     5rc     6rc     7rc    80rc    82rc    84rc    85rc   153rc   157rc   158rc

                               160rc   165rc   168rc  203rc   204rc   205rc   253rc   441rc   444rc   516rc   521rc   524rc   582rc   583rc 
                               584rc   633rc  1052rc  1392rc  1394rc  1417rc  1597rc  1609rc  1617rc  1620rc  1683rc  1744rc  1783r  1785rc
                               1788rc  1806r  1808r  1810rc  1811rc  1812rc  1813rc  1814rc  1815rc  1848rc  1886rc  1899rc  1900rc  2001rc 

                               ......太多不一一列出

      說明:
      這些程序號後面的rc是什麼意思?

      c 將此檔案作為當前目錄使用。 
      e 將此檔案作為程式的可執行物件使用。 
      r 將此檔案作為根目錄使用。 
      s 將此檔案作為共享庫(或其他可裝載物件)使用

   2,如何列出程序的詳細資訊,而不僅僅是程序id?
     用 -v引數即可
     說明: -v:  含義是:verbose output,詳細的輸出資訊
     例子:

     [[email protected] ~]# fuser /var/log
     /var/log:             4196c
     [[email protected] ~]# fuser -v /var/log

                          USER        PID ACCESS COMMAND
     /var/log:            root       4196 ..c.. bash

    3,如何列出程序所屬的使用者?
     用 -u引數即可
     說明: -u: 含義:display user IDs,顯示使用者id

     例子:
     [[email protected] ~]# fuser -u /var/log
     /var/log:             4196c(root)

     4,如何殺死所有正在訪問指定檔案的程序?
     用 -k引數即可
     說明: -k:含義: kill processes accessing the named file

     例子:

     [[email protected] lhd]# fuser -v /root/install.log
                          使用者     程序號 許可權   命令
     /root/install.log:   root       3185 f.... tail
     [[email protected] lhd]# fuser -k /root/install.log
     /root/install.log:    3185
     [[email protected] lhd]# fuser -v /root/install.log

     說明: -k引數能夠殺死所有的正在訪問指定檔案的程序,所以用來殺程序時非常方便
     說明之二: fuser如何殺死的程序?
             它傳送的是這個訊號:SIGKILL



三,多學一點知識

    1,fuser可以列出它所知的訊號:
     用 -l引數即可

     例子:
     [[email protected] ~]# fuser -l
     HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
     STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
     UNUSED

    2,fuser可以傳送它已知的訊號給訪問的指定檔案程序而代替-k引數預設傳送的SIGKILL
      例如:只是掛起程序,那麼傳送HUP訊號就可以了

      例子:
      [[email protected] lhd]# fuser -v /root/install.log
                           使用者     程序號 許可權   命令
      /root/install.log:   root       3347 f.... tail
      [[email protected] lhd]# fuser -k -SIGHUP /root/install.log
      /root/install.log:    3347
      [[email protected] lhd]# fuser -v /root/install.log