Existe-t-il un équivalent dans Windows à "exec" d'Unix Shell? Fondamentalement, je dois éviter de bifurquer un nouveau processus, afin que les canaux d'entrée / sortie soient préservés, ainsi que l'identifiant du processus.
Éditer:
Alors, voici mon problème. J'ai un processus A qui démarre un script, et ce script se termine par l'exécution d'un processus B. J'ai besoin pour A d'obtenir toutes les sorties de B, ainsi que de pouvoir tuer B en tuant le processus qu'il a engendré (le script) .
Sous Unix, l'exécution de B avec exec
fait ce travail.
windows
shell
windows-command-prompt
Daniel C. Sobral
la source
la source
Réponses:
AFAIK il n'y en a pas. Windows manque de
execv()
savoir comment bash exec le fait.call
fonctionne pour appeler des fichiers batch (facile, il suffit d'interpréter le fichier dans l'interpréteur actuel, similaire à la.
commande bash ) mais pas pour les exes.Cela rend impossible l'écriture de scripts wrapper à une ligne pour les scripts dans n'importe quelle langue sous Windows. Vous obtiendrez toujours ce "Terminer le travail par lots?" merde sur Ctrl + C et tuer le processus par lots (pas avec Ctrl + C, du gestionnaire de tâches disent) ne tuera pas le processus enfant. Je cherche maintenant un fichier de modèle C pour faire ce wrapping.
MISE À JOUR: Windows a
_execv()
sa couche de compatibilité POSIX dans MSVCRT, mais AFAIK (ne l'a pas testé) c'est juste un wrapperCreateProcess
donc il créera toujours un nouveau processus, il ne peut pas remplacer le processus actuel.la source
Je pense que l' appel fait ce que vous voulez, mais je ne suis pas sûr à 100%.
la source
Vous pouvez construire une commande batch dynamique et l'exécuter en fonction de la sortie des opérations précédentes. Je ne suis pas sûr que ce serait une solution dans votre cas, mais le code suivant fonctionne très bien.
la source
exec
...call
/path/to/exe/something.exe
la source