2017-09-12 1 views
0

J'ai un shell parent qui appelle un shell enfant comme processus d'arrière-plan. Dans le shell enfant, j'envoie une sortie au parent, il est nécessaire de capturer le statut de l'enfant dans le processus parent. J'utilise la commande "jobs" pour la même chose. Je suis capable de capturer l'état de fonctionnement de l'enfant, mais je ne reçois pas le statut Done dans le parent. Veuillez trouver ci-dessous le code et la sortie -unix AIX - récupère l'état d'un processus d'arrière-plan enfant dans le script shell parent

Parent Shell:

#!/bin/ksh 
date 
./sleep.com& 
echo $? 
echo $! 
pid=$! 
echo $pid 
jobs $pid 
wait $pid 
jobs $pid 
echo $pid 

coque pour enfants (processus d'arrière-plan sleep.com-):

#!/bin/ksh 
sleep 8 
exit 10 

sortie de Execution-

September 11, 2017 at 07:58:17 PM 
0 
12517444 
12517444 
[1] + Running     <command unknown> 
./parent.com[10]: jobs: no such job 
12517444 

S'il vous plaît aidez-moi à capturer le statut de jobs comm et après l'achèvement de l'enfant.

Dans mon cas, je reçois une erreur:

./parent.com[10]: jobs: no such job

Merci & Cordialement

Himanshu Agrawal.

Répondre

0

Essayez wait -n:

#!/bin/ksh 
set -v 
date 
./sleep.com& 
echo $? 
pid=$! 
echo $pid 
wait -n $pid 
child_exit=$? 
printf 'child exited with code %d\n' "$child_exit" 
+0

grâce Lorinczy. Cela me donne la sortie du processus fils dans la variable. mais j'ai besoin de supprimer la commande d'attente, ce qui signifie que le processus enfant est en arrière-plan, mais je devrais être capable d'obtenir le statut d'enfant. J'avais googlé que je pouvais utiliser la commande jobs pour faire la même chose, mais quand j'utilise dans le shell il me donne "pas un tel processus" après l'achèvement du processus. veuillez suggérer. –

+0

Vous pouvez utiliser un langage de programmation réel avec prise en charge du signal: vous recevrez un signal SIGCHILD à la sortie de l'enfant. –