L'exécution d'une commande shell dans un programme c
Je veux exécuter une commande shell dans mon programme c. Mais le truc c'est que je ne veux pas faire mon programme de patienter jusqu'à la commande effectuée. Pas besoin de lire le shell de commande de sortie (il ne renvoie pas de données de toute façon) Donc en gros, est-ce possible?
BTW, il n'a pas d'importance si vous souhaitez exécuter une commande shell ou une autre exécutable. Si vous utilisez
system()
ou la fork()/exec()
approche, tout ce qui est nécessaire est un exécutable. Peut-être que vous voulez éditer le titre de votre question?
OriginalL'auteur wonnie | 2011-04-10
Vous devez vous connecter pour publier un commentaire.
fork()
etsystem()
est ce que vous avez besoinsystem
aurait le processus de l'enfant d'attente pour la commande shell -exec
de remplacer le processus de l'enfant avec la coque..pas de. Il remplace le processus de l'enfant avec un autre processus. Il n'est pas clair à partir de l'OP si il veut exécuter un autre programme ou une ligne de commande shell, mais si c'est la dernière, alors seulement le système() fera l'affaire. exec n'implique pas la coquille.
si vous passer les arguments pertinents (c'est à dire démarrer /bin/sh et passer le script que vous souhaitez exécuter).
OriginalL'auteur Stefano Borini
Sûr,
fork
etexec
: utilisationfork
pour créer un nouveau processus et, dans le processus de l'enfant, l'utilisationexec
pour démarrer le shell avec votre commande.execv
prend les arguments que vous auriez normalement donner à la coque.Votre code pourrait ressembler à ceci:
le processus enfant d'envoyer un
SIGCHLD
signal quand il meurt. Ce code cité de la norme POSIX (SUSv4) poignée:ls | grep -v hello
. Ce sera le travail avec le système, mais ne fonctionnera pas avec exec.l'OP peut passer ceux de la coquille - système fait la même chose (mais d'un autre
fork
&exec
derrière les scènes).OriginalL'auteur rlc
Essayer de code comme ceci:
waitpid
.Désolé. Je ne suis pas vraiment bon avec les *nix Api :).
OriginalL'auteur JackMc
Ce sujet tout simplement amplification de la commande avec
system ("command &")
?OriginalL'auteur Jens