How to close a file descriptor from another process in unix systems

You can use command lsof to get file descriptors for all running processes, but what I would like to do is to close some of those descriptors without being inside that process. This can be done on Windows, so you can easily unblock some application.

Is there any command or function for that?


In Windows you can use a program to do it because someone wrote a program that inserts a device driver into the running kernel to do it. By the way it can be dangerous to do this, because after you close a handle that a broken application was using, the application doesn't know that the handle was closed, and when the application opens some other unrelated object it doesn't know that the same handle might now refer to some other unrelated object. You really want to kill the broken application as soon as possible.

In Linux surely you can use the same kind of technique. Write a program that inserts a module into the running kernel. Communicate with the module and tell it which handles to close. It will be equally dangerous to do so.

I don't know why you are trying to do this, but you should be able to attach to the process using gdb and then call close() on the fd. Example:

In one shell: cat

In another shell:

$pidof cat

$gdb -p 7213

lots of output


Now you tell gdb to execute close(0):

(gdb) p close(0)

$1 = 0

(gdb) c


Program exited with code 01.

In the first shell I get this output:

cat: -: Bad file descriptor

cat: closing standard input: Bad file descriptor

Need Your Help

preventing multiple instance of one form from displaying

c# forms window

I am working on an application in which there is one main form and several other forms that can be used concurrently. when A user clicks to open another form, I'd like to make it so that clicking the

Advantages and Disadvantages of Using Ajax on public page

ajax zend-framework jquery

I want to make a project like the Symptoms checker like WebMD did it