2011-04-24 3 views
5

Mon Makefile ressemble à quelque chose comme ceci:Obtenir dernier processus PID Makefile

setsid ./CppServer>daemon.log 2>&1 & 
echo $!>daemon.pid 

Ce que je pense à faire est de stocker le PID de my_awesome_script dans le fichier correspondant. Cependant, il n'y a rien là. Alors, où est le problème?

Répondre

4

Si votre fichier makefile ressemble vraiment à ceci, vous obtiendrez une erreur, car je ne vois pas de syntaxe make, juste une syntaxe shell. Cependant, ma boule de cristal me dit que ces deux lignes pourraient faire partie de la recette d'une règle. Si elles le sont, vous devriez réaliser comment make exécute des recettes; pour chaque ligne, un sous-shell distinct est créé, dans lequel la commande de cette ligne est exécutée indépendamment: vos deux commandes ne connaissent rien de l'environnement de l'autre. Si vous souhaitez que deux commandes soient exécutées dans le même sous-shell, vous devez les émettre en une ligne (en utilisant des caractères de continuation de ligne si nécessaire), ou utiliser la directive ONESHELL de make.

+1

Ce n'est pas utile. Dites-moi: pourquoi $! vide lorsque demandé dans Makefiles? – nalply

+2

@nalply: Il est vide car make ne définit pas de variable avec ce nom. Si vous voulez l'utiliser dans le shell, vous devez échapper le signe dollar: '$$!', Mais vous devez être conscient de ma remarque sur l'émission des commandes sur une ligne, séparées par ex. un point-virgule. – eriktous

+0

@eriktous grande réponse, certainement utile. J'ai eu le prochain numéro de Nalply, bien sûr le $$! résout cela. – David

0

La variable que vous essayez d'utiliser imprime le pid du dernier programme exécuté en arrière-plan. Il est correctement écrit comme echo $! > filename.extension Mais puisque vous l'exécutez dans le foregorund vous avez deux choix. Exécutez-le en arrière-plan en ajoutant un & à la fin de la ligne ./script_to_run &, ou vous pouvez faire imprimer le script lui-même pour classer le pid du processus en cours en utilisant echo $$> filename.extension (dans le script). Voici un lien qui pourrait vous aider

+0

Il n'est pas nécessaire d'ajouter un $ supplémentaire au début des variables internes. – rubixibuc

+0

Je suis désolé, le contenu du Makefile que j'ai fourni dans la question n'était pas tel qu'il était dans Makefile (j'ai exécuté le script en arrière-plan). Maintenant, il est cependant. – Alex

+0

J'exécute un programme, pas un script, et j'ajoute à l'invocation. Mais $! est toujours vide. Et maintenant? :-) – nalply

Questions connexes