Printable Version of Topic

Click here to view this topic in its original format

Linuxhelp _ Tips and Tricks _ Killing Access To Devices

Posted by: Corey Nov 13 2003, 01:21 PM

There have been plenty of times that I have had to search and search the output of "ps aux" to try and find a process that is locking a certain device. More often then not, it had to do with my sound device (/dev/dsp), so, I would issue the command "ps aux" and then manually look at the list of processes to see which ones, from memory, would lock up sound.

Finally a discovered a useful little command to acheive this exact same thing:

QUOTE
$ fuser /dev/dsp
/dev/dsp:  18535 18536 18537 18540 18541 18542


What this program does is that it gives you a list of processes that is currently using a certain device, in this case /dev/dsp .

So, to find out what the program is, just send the output of ps aux to grep:

QUOTE
$ ps aux | grep 18535
duende  18535  0.2  2.3 51644 12296 ?      S    14:45  0:00 xmms


To immediatly kill the process using the device, pass the -k parameter (fuser -k /dev/dsp).

Check out the fuser manpage to learn more.

Posted by: hughesjr Nov 15 2003, 11:56 AM

This works really well for mounted file systems as well...

If you are trying to unmount a partition and you get the message that it can't unmount, you can use fuser to figure out (then kill) all processes that have items opened on that partition.

Here is an example for a partiton mounted at /mnt/server1/archive ... which is a Windows file server I have mounted via smbfs...

I need to unmount the partition so I can reboot the file server ... so I issue the command:

umount /mnt/server1/archive

and the results are:

umount: /mnt/server1/archive: device is busy

yikes ! - I have something using that share ... and if I don't figure out what it is, I can corrupt the open resource by rebooting....so we can use the fuser command with the -m switch to figure out the processes are using that mount.... the command would be:

QUOTE
fuser -m /mnt/server1/archive


The result is:
/mnt/server1/archive: 9170c

9170 is the process ID ... and the c means that something is using that location as it's current directory (see man fuser for more on what c, e, f, r, and m mean after a PID while using fuser).

The command:

QUOTE
ps -ef | grep 9170

returns this information:

root 9170 9168 0 09:45 pts/1 00:00:00 bash

which means that the user root has the program bash open ... and the c from above means that the program bash's current directory is /mnt/server1/archive. Sure enough, I had a bash terminal window open, and it was setting with /mnt/server1/archive as it's current directory.

After I change the directory to /root in that terminal, the command:

umount /mnt/server1/archive

works great....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)