2009-08-31 6 views
2

Mon application Java (Eclipse) génère un processus fils, surveillant son flux stdout et sa valeur de sortie. Lorsque le processus enfant tombe en panne avec SIGABRT, aucun fichier de vidage de noyau n'est créé. Si je démarre le processus enfant manuellement et le tue, le core dump est là.Cliché de base pour le processus engendré à partir de Java

Je n'ai pas pu trouver d'informations sur le fait que la machine virtuelle Java prépare d'une manière ou d'une autre le processus fils (par exemple en définissant la taille du fichier de vidage du noyau sur 0).

Est-ce que quelqu'un sait ce qui pourrait se passer et quels paramètres changer pour que les vidages de base soient créés?

Ceci est sur Suse 10 et Ubuntu 9.04, avec Java 5 et 6, si cela fait une différence.

meilleures salutations, Vlad

+0

Pourriez-vous ajouter des détails, tels qu'un fragment de code décrivant exactement comment vous générez le processus enfant? –

+0

Je pense que les vidages de base ne sont pas produits si votre répertoire de travail actuel n'est pas accessible en écriture par le processus. Est-ce une possibilité? –

+0

Le répertoire de travail est accessible en écriture. La même application a démarré manuellement, produit un vidage de code. –

Répondre

3

Normalement, la création (non) des fichiers de base est contrôlé par la commande ulimit (spécifiquement ulimit -c). Voir help ulimit (en bash) pour plus de détails.

Ce paramètre doit être hérité de shell à subshell, Java doit donc utiliser le paramètre dans le shell à partir duquel il a été démarré. Java peut jouer avec ulimit, mais je n'ai jamais entendu parler de ça. Essayez de définir ulimit dans un shell, puis démarrez votre processus Java à partir de là. Si cela ne vous aide pas, vous pouvez appeler un script wrapper de Java qui définit ulimit, puis démarre votre programme.

+0

Merci, je vais essayer avec emballage, ne pense pas à ce sujet. –

+0

Cela a fonctionné, merci beaucoup! –

Questions connexes