Quand tu dis que ton processus Java plante, c'est qu'il plante lamentablement avec une exception, ou que tu as fait un System.exit() ?
Le mieux, c'est de gérer dans ton programme Java la sortie de manière propre: suivant ce qui se passe, tu sors avec un System.exit(code), ou code prend une valeur non nulle en cas d'erreur, ou 0 si tout va bien. Au passage, la doc de l'API Java indique juste que "By convention, a nonzero status code indicates abnormal termination", la traduction entre le code que tu donnes à exit() et ce que le système reçoit n'est pas spécifiée (à ce que j'ai trouvé dans l'API et la Java language specification, mais je peux me tromper).
Par là-dessus, tu peux faire, soit un script shell si c'est autorisé (portabilité, contraintes, tout ça), comme Benoit Plessis te l'a indiqué plus haut, soit un programme C tout simple qui fait la même chose avec system() (ou fork() puis un exec* si tu y tiens) pour lancer le processus. Pour recevoir la fin du processus, tu peux utilider un gestionnaire de signaux avec signal(), ou faire directement un wait(). Le gestionnaire de signaux a l'avantage de permettre à ton processus C de faire autre chose pendant ce temps, le wait() bloquant le processus jusqu'à l'arrivée d'un signal. Cependant, avec un gestionnaire de signaux, le "traitement principal" fait par ton processus C peut être interrompu à tout moment. donc la conception et le codage doivent être adaptés (réentrance, principalement, ou le cas des processus multi-threadés). system() et signal() sont du C ISO, mais wait(), fork(), les exec*() et SIGCHLD, qui codifie le signal "mort d'un processus fils" pour signal() sont POSIX (le C ISO ne définissant pas les notions de processus père/fils, ou même de parallélisme, de threads ou quoi que ce soit dans le genre).
# Une idée comme ça...
Posté par alf . En réponse au message contrôle d'un process Java par un process C. Évalué à 2.
Le mieux, c'est de gérer dans ton programme Java la sortie de manière propre: suivant ce qui se passe, tu sors avec un System.exit(code), ou code prend une valeur non nulle en cas d'erreur, ou 0 si tout va bien. Au passage, la doc de l'API Java indique juste que "By convention, a nonzero status code indicates abnormal termination", la traduction entre le code que tu donnes à exit() et ce que le système reçoit n'est pas spécifiée (à ce que j'ai trouvé dans l'API et la Java language specification, mais je peux me tromper).
Par là-dessus, tu peux faire, soit un script shell si c'est autorisé (portabilité, contraintes, tout ça), comme Benoit Plessis te l'a indiqué plus haut, soit un programme C tout simple qui fait la même chose avec system() (ou fork() puis un exec* si tu y tiens) pour lancer le processus. Pour recevoir la fin du processus, tu peux utilider un gestionnaire de signaux avec signal(), ou faire directement un wait(). Le gestionnaire de signaux a l'avantage de permettre à ton processus C de faire autre chose pendant ce temps, le wait() bloquant le processus jusqu'à l'arrivée d'un signal. Cependant, avec un gestionnaire de signaux, le "traitement principal" fait par ton processus C peut être interrompu à tout moment. donc la conception et le codage doivent être adaptés (réentrance, principalement, ou le cas des processus multi-threadés).
system() et signal() sont du C ISO, mais wait(), fork(), les exec*() et SIGCHLD, qui codifie le signal "mort d'un processus fils" pour signal() sont POSIX (le C ISO ne définissant pas les notions de processus père/fils, ou même de parallélisme, de threads ou quoi que ce soit dans le genre).