engendrer un processus entièrement séparé dans linux via bash

Je dois avoir un script exécuté (bash ou perl ou php, n’importe lequel le fera) une autre commande, puis quitter, tandis que l’autre commande s’exécute toujours et quitte tout seul. Je pouvais planifier via à la commande, mais j’étais curieux s’il y avait un moyen plus facile.

#!/bin/sh your_cmd & echo "started your_cmd, now exiting!" 

Des constructions similaires existent pour perl et php, mais dans sh / bash, il est très facile d’exécuter une autre commande en arrière-plan et de continuer.

modifier

Une très bonne source pour la manipulation de processus générique est constituée de tous les scripts de démarrage sous /etc/init.d . Ils font toutes sortes de trucs comme suivre les pids, exécuter des commandes de démarrage / arrêt / redémarrage de base, etc.

Pour exécuter une commande en arrière-plan, vous pouvez append un “&” à la commande.

Si vous avez besoin que le programme dure après votre session de connexion, vous pouvez utiliser nohup .

Voir cette discussion stackoverflow similaire: comment exécuter une commande en arrière-plan …

La manière habituelle d’exécuter une commande et de la faire fonctionner lorsque vous vous déconnectez est d’utiliser nohup(1) . nohup empêche la commande donnée de recevoir le signal HUP à la sortie du shell. Vous devez également exécuter en arrière-plan avec le suffixe de commande esperluette (&).

 $ nohup some_command arg1 arg2 & 

& ?

     #! / usr / bin / bash
     # command1.sh: exécute command2.sh et quitte
     command2.sh &

Je ne suis pas tout à fait sûr que ce soit ce que vous recherchez, mais vous pouvez créer un arrière-plan pour un processus exécuté dans un shell en ajoutant le symbole esperluette (&) comme dernier caractère de la commande.

Donc, si vous avez un script, a.sh

et a.sh doit générer un processus distinct, comme par exemple exécuter le script b.sh, vous devriez:

 b.sh & 

Tant que vous avez mentionné Perl:

 fork || exec "ls"; 

… où “ls” est quelque chose. Répétez l’opération pour autant de commandes que vous devez lancer.