[ 
https://issues.apache.org/jira/browse/GUACAMOLE-1625?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17557409#comment-17557409
 ] 

Nick Couchman commented on GUACAMOLE-1625:
------------------------------------------

I think this is a result of the fact that guacd uses fork/vfork to create the 
child process, and all of the memory and file descriptors are copied.

I'm not sure there's a practical way to resolve this, aside from trying to 
close out FDs after forking the child process, which seems like it may be 
hard/expensive to determine which ones are safe to close and which need to 
remain open?

It looks like there may be a possibility of opening the file descriptors with 
the O_CLOEXEC flag, but I don't know what the implications of this are and if 
there are any side effects that will impact how Guacamole functions.

https://unix.stackexchange.com/questions/91058/file-descriptor-and-fork
https://stackoverflow.com/questions/5713242/prevent-file-descriptors-inheritance-during-linux-fork
http://tzimmermann.org/2017/08/17/file-descriptors-during-fork-and-exec/

> Child processes inherit useless fd from parent processes
> --------------------------------------------------------
>
>                 Key: GUACAMOLE-1625
>                 URL: https://issues.apache.org/jira/browse/GUACAMOLE-1625
>             Project: Guacamole
>          Issue Type: Improvement
>          Components: guacd
>    Affects Versions: 1.4.0
>            Reporter: luo
>            Priority: Minor
>
> For example, if we open three ssh connections in a row, the subprocesses will 
> have more and more fd, which is actually not necessary
> Most fd's come from the socketpair() of the parent process
>  
> {code:java}
> # ps aux | grep guacd
> root      6453  0.0  0.3 522844 14756 pts/0    Sl+  19:24   0:00 guacd -f 
> -Ldebug
> root      6457  0.2  0.9 628436 37176 pts/0    Sl   19:24   0:00 guacd -f 
> -Ldebug
> root      6512  1.8  0.9 483508 38644 pts/0    Sl   19:31   0:00 guacd -f 
> -Ldebug
> root      6605  0.0  0.0  21540  1084 pts/2    S+   19:31   0:00 grep 
> --color=auto guacd
> # cd /proc/6512/fd
> # ls
> 0  1  10  11  12  13  14  2  3  4  5  6  7  8  9
> # ps aux | grep guacd
> root      6453  0.0  0.3 678504 14756 pts/0    Sl+  19:24   0:00 guacd -f 
> -Ldebug
> root      6457  0.1  0.9 628436 37176 pts/0    Sl   19:24   0:00 guacd -f 
> -Ldebug
> root      6512  0.2  0.9 483508 38752 pts/0    Sl   19:31   0:00 guacd -f 
> -Ldebug
> root      6620  5.0  0.9 679600 38748 pts/0    Sl   19:31   0:00 guacd -f 
> -Ldebug
> root      6713  0.0  0.0  21540  1104 pts/2    S+   19:31   0:00 grep 
> --color=auto guacd
> # cd /proc/6620/fd
> # ls
> 0  1  10  11  12  13  14  15  16  17  2  3  4  5  6  7  8  9
> # ps aux | grep guacd
> root      6453  0.0  0.3 703092 14756 pts/0    Sl+  19:24   0:00 guacd -f 
> -Ldebug
> root      6457  0.1  0.9 628436 37176 pts/0    Sl   19:24   0:00 guacd -f 
> -Ldebug
> root      6512  0.1  0.9 483508 38752 pts/0    Sl   19:31   0:00 guacd -f 
> -Ldebug
> root      6620  0.3  0.9 679600 38748 pts/0    Sl   19:31   0:00 guacd -f 
> -Ldebug
> root      6720  1.2  0.9 761528 38804 pts/0    Sl   19:31   0:00 guacd -f 
> -Ldebug
> root      6813  0.0  0.0  21540  1148 pts/2    S+   19:31   0:00 grep 
> --color=auto guacd
> # cd /proc/6720/fd
> # ls
> 0  1  10  11  12  13  14  15  16  17  18  19  2  20  3  4  5  6  7  8  9 
> {code}
> This may cause libvncserver to fail using select() if the useless fd is 
> larger than FD_SETSIZE
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to