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

Pavel Tupitsyn edited comment on IGNITE-13536 at 10/7/20, 1:21 PM:
-------------------------------------------------------------------

*Investigated, won't fix:*

* Java and .NET both install SIGCHLD handler to deal with child processes
* Both do this lazily - when a child process is started
* direct-io module uses JNA library, which calls {{Runtime.getRuntime().exec}} 
on initialization
* The above overwrites .NET SIGCHLD handler, so .NET does not call {{wait}} for 
terminated child processes, leaving them in a zombie state
* The same can be true the other way (.NET overwrites Java SIGCHLD handler, so 
Java can't work with child processes correctly)

*Workaround:*
* When using Ignite.NET with direct-io and there is a need to start child 
processes, use Java code to do that (via ExecuteJavaTask or Services)


was (Author: ptupitsyn):
Investigated, won't fix:

* Java and .NET both install SIGCHLD handler to deal with child processes
* Both do this lazily - when a child process is started
* direct-io module uses JNA library, which calls {{Runtime.getRuntime().exec}} 
on initialization
* The above overwrites .NET SIGCHLD handler, so .NET does not call {{wait}} for 
terminated child processes, leaving them in a zombie state
* The same can be true the other way (.NET overwrites Java SIGCHLD handler, so 
Java can't work with child processes correctly)

Workaround:
* When using Ignite.NET with direct-io and there is a need to start child 
processes, use Java code to do that (via ExecuteJavaTask or Services)

> .NET: Child processes become zombies when persistence is used with direct-io 
> on Linux
> -------------------------------------------------------------------------------------
>
>                 Key: IGNITE-13536
>                 URL: https://issues.apache.org/jira/browse/IGNITE-13536
>             Project: Ignite
>          Issue Type: Bug
>          Components: platforms
>    Affects Versions: 2.8
>            Reporter: Pavel Tupitsyn
>            Assignee: Pavel Tupitsyn
>            Priority: Major
>              Labels: .NET
>             Fix For: 2.10
>
>         Attachments: IgnitePersistenceProcessHangTest.csproj, Program.cs, 
> Runner.java, pom.xml
>
>   Original Estimate: 6h
>  Remaining Estimate: 6h
>
> After using Ignite with direct-io optional module and persistence enabled, 
> user code hangs when trying to kill a child process and wait for it to exit 
> using base class library classes (Process). 
> See attached reproducer:
> * Copy .cs and .csproj files to a folder
> * dotnet run
> The program hangs forever on the last line (process.WaitForExit()), and the 
> child process becomes a zombie (defunct).
> * Similar Java program (see attachments) does not reproduce the issue



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to