Exactly !

In fact, I'm in mastery of ... nothing ! But I tried to workaround this problem 
and found that Java Process class lacks something ! I was working in Eclipse 
and you can process while testing (the red button in console view) but shutdown 
hooks are not called. So I dug a little to understand why Eclipse team said 
that it is not possible (up to now). Indeed, Eclipse spawns a new Process 
Object (a new JVM in fact) but can't close it gracefully. I think other 
application / programs  may need such functionnality so I post on this list to 
have advices of specialists of openJdk.

You are right again on the second part ! Actually I did exactly that in my 
applications, only for debug/test, very simple :
                boolean loopz = true;
                InputStreamReader isr = null;
                BufferedReader br = null;
                try {
                        isr = new InputStreamReader(System.in);
                        br = new BufferedReader(isr);
                        while (loopz) {
                                String userInput = br.readLine();
                                System.out.println("input => "+userInput);
                                if (userInput.equalsIgnoreCase("quit") || 
userInput.equalsIgnoreCase("exit")) {
                                                System.exit(0);
                                }
                        }
                }
                catch (Exception er) {
                        er.printStackTrace();
                        loopz = false;
                }
                finally {
                        try { br.close(); } catch (Exception e) {}
                        try { isr.close(); } catch (Exception e) {}
                }


However I think it could be a good add to Java to make a Process having better 
control on its own child termination.

Thanks !

Nicolas Le Picard


-----Message d'origine-----
De : Peter Levart [mailto:peter.lev...@gmail.com] 
Envoyé : mardi 4 mars 2014 15:47
À : LE PICARD NICOLAS; Alan Bateman; Krystal Mok
Cc : core-libs-dev@openjdk.java.net
Objet : Re: How to close a Process and having shutdown hooks called ?

On 03/04/2014 02:09 PM, LE PICARD NICOLAS wrote:
> I didn't know for jdk8 functions destroy and the new one destroyForcibly...
>
> And Jonathan was right in his previous answer, I was looking for a solution 
> in Java, I mean a portable one like  in Process class, like the 
> "destroyGracefully".
> I am looking to signals because it seems to be a simple way to achieve this 
> "portable" solution, maybe I'm wrong.
>
> It would be useful (as you said) to have a function to kill "gracefully" 
> through Process class, no ?
>
> Nicolas Le Picard

Hi Nicolas,

So you're spawning a Java sub-process from a Java master process using 
java.lang.Process, do I understand correctly?

Are you in control of the code that represents the child sub-process? Is this 
code already using System.in (STDIN) stream for anything? If the answers are 
YES and NO respectively, then you may be able to use the System.in in the 
sub-process (spawn a special monitoring thread) and
Process.getOutputStream() in the master process to establish a one way channel 
for passing commands in direction: master process -> sub-process. One of those 
commands could be "shutdown" for example, that would trigger a System.exit() in 
the sub-process. This way you could make the shut-down hooks in sub-process be 
executed before exiting...

Regards, Peter

>
> -----Message d'origine-----
> De : Alan Bateman [mailto:alan.bate...@oracle.com] Envoyé : mardi 4 
> mars 2014 13:12 À : Krystal Mok Cc : LE PICARD NICOLAS; 
> core-libs-dev@openjdk.java.net Objet : Re: How to close a Process and 
> having shutdown hooks called ?
>
> On 04/03/2014 11:51, Krystal Mok wrote:
>> Hi Nicolas,
>>
>> Looks like a well discussed question. On Posix systems, SIGTERM 
>> should work for you. That's the default signal sent by the 'kill' command on 
>> Linux.
>> e.g. please take a look here:
>> http://stackoverflow.com/questions/2541597/how-to-gracefully-handle-t
>> h
>> e-sigkill-signal-in-java
>>
>> - Kris
>>
> I think he's on Windows and is looking for destroy to use something other 
> than TerminateProcess.
>
> As background, the destroy method was confusingly specified to kill the 
> sub-process forcibly but it wasn't implemented this way everywhere. On 
> Unix/Linux then the long standing implementation used SIGTERM and so no 
> guarantee that it would cause the sub-process to terminate. This mismatch was 
> examined in JDK 8 (you'll need to go through the archives of this mailing 
> list to see the discussion) and the javadoc updated to make it clear that it 
> is implementation specific as to whether it is done forcibly or not. In 
> addition a new destroyForcibly was added to do the SIGKILL or 
> TerminateProcess for cases where you really want to kill the child. There 
> isn't a corresponding destroyGracefully but clearly this would be useful if 
> were feasible to implement everywhere.
>
> -Alan.

Reply via email to