Chinaunix首页 | 论坛 | 博客
  • 博客访问: 186267
  • 博文数量: 51
  • 博客积分: 689
  • 博客等级: 上士
  • 技术积分: 525
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-03 13:05
文章分类

全部博文(51)

文章存档

2014年(1)

2013年(2)

2012年(7)

2011年(11)

2010年(30)

分类:

2011-06-09 14:42:38

卸载无响应的 DVD 驱动器 网络新手的经历:按下服务器(运行基于 Redmond 的操作系统)DVD 驱动器上的 Eject 按钮时,它会立即弹出。他然后抱怨说,在大多数企业 Linux 服务器中,如果在那个目录中运行某个进程,弹出就不会发生。作为一名长期的 Linux 管理员,我会重启机器。如果我不清楚正在运行什么,以及为何不释放 DVD 驱动器,我则会弹出磁盘。但这样效率很低。 下面介绍如何找到保持 DVD 驱动器的进程,并轻松弹出 DVD 驱动器:首先进行模拟。在 DVD 驱动器中放入磁盘,打开一个终端,装载 DVD 驱动器: # mount /media/cdrom # cd /media/cdrom # while [ 1 ]; do echo "All your drives are belong to us!"; sleep 30; done 现在打开第二个终端并试着弹出 DVD 驱动器: # eject 将得到以下消息: umount: /media/cdrom: device is busy 在释放该设备之前,让我们找出谁在使用它。 # fuser /media/cdrom 进程正在运行,无法弹出磁盘其实是我们的错误。 现在,如果您是根用户,可以随意终止进程: # fuser -k /media/cdrom 现在终于可以卸载驱动器了: # eject fuser 很正常。 ———————————————————————————————————————————————— 用fuser杀掉进程 一,为什么要使用fuser? 先说 fuser的作用, fuser能识别出正在对某个文件或端口访问的进程 大家想一下,还有哪个命令具备这个功能? 没错,是lsof, 我们前面讲过, lsof能够找出正在对指定文件访问的进程, 那么它们两者之间有何区别? fuser有一个特别的用法在于它可以一次杀死那些正在访问指定文件的进程 二,如何使用fuser? 1,如何用fuser得到正在使用指定文件的进程? 用法: fuser 文件 说明:它会把正在使用当前文件的进程id列出 [root@localhost 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)) [root@localhost 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,详细的输出信息 例子: [root@dev ~]# fuser /var/log /var/log: 4196c [root@dev ~]# fuser -v /var/log USER PID ACCESS COMMAND /var/log: root 4196 ..c.. bash 3,如何列出进程所属的用户? 用 -u参数即可 说明: -u: 含义:display user IDs,显示用户id 例子: [root@dev ~]# fuser -u /var/log /var/log: 4196c(root) 4,如何杀死所有正在访问指定文件的进程? 用 -k参数即可 说明: -k:含义: kill processes accessing the named file 例子: [root@localhost lhd]# fuser -v /root/install.log 用户 进程号 权限 命令 /root/install.log: root 3185 f.... tail [root@localhost lhd]# fuser -k /root/install.log /root/install.log: 3185 [root@localhost lhd]# fuser -v /root/install.log 说明: -k参数能够杀死所有的正在访问指定文件的进程,所以用来杀进程时非常方便 说明之二: fuser如何杀死的进程? 它发送的是这个信号:SIGKILL 三,多学一点知识 1,fuser可以列出它所知的信号: 用 -l参数即可 例子: [root@dev ~]# 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信号就可以了 例子: [root@localhost lhd]# fuser -v /root/install.log 用户 进程号 权限 命令 /root/install.log: root 3347 f.... tail [root@localhost lhd]# fuser -k -SIGHUP /root/install.log /root/install.log: 3347 [root@localhost lhd]# fuser -v /root/install.lo
阅读(1181) | 评论(0) | 转发(0) |
0

上一篇:zz 理解/proc/cpuinfo

下一篇:linux single root

给主人留下些什么吧!~~