This bug is Terminal leaves files open when invoking shell directly. It was filed on 2006-03-24 at 23:45 PST.
UPDATE 2006-03-25: Uploaded the test app to GeoCities. Linked below.
When Terminal invokes a specific shell directly, rather than by invoking /usr/bin/login, several files are left open.
Steps to Reproduce:
- Launch Terminal.
- Terminal menu→Preferences….
- Select “Execute this command (specify complete path):”
- Specify the complete path.
- File menu→New Shell.
- Run the attached test app, or run ps and then run lsof with the pid of the shell.
The test app prints “3”. lsof reports only three file descriptors: 0, 1, and 2, the respective FDs of stdin, stdout, and stderr.
The test app prints “10”, “11”, “14”, or some other number. lsof reports a lot of open files having to do with Carbon (suggesting that the shell probably did not open them itself).
The test program creates and opens a file, and reports the FD it gets back from
open returns the first FD that was available. In the absence of any other open files, this should be 3 (because that's the FD after stdin, stdout, and stderr).
When I tested using test-app-free version of the above steps, I did observe that zsh 4.3.1 leaves open one file of its own (the terminal device). Perhaps it opens /dev/tty. This open file is not passed onto subprocesses, however, as is demonstrated by the test app.
Terminal (or Carbon) is responsible for all the other files that Terminal leaves open; this is obvious from the paths of the open files. Maybe login is closing them; in this case, Terminal should do this itself when the user chooses to bypass login.