Help - Search - Members - Calendar
Full Version: Killing Access To Devices
Linuxhelp > Support > Tips and Tricks
Corey
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.
hughesjr
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....
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Invision Power Board © 2001-2017 Invision Power Services, Inc.