Implémentation de la fourche dans perl

Je veux exécuter un processus enfant en perl. Je souhaite également que mon code soit indépendant de la plate-forme (même chose pour Windows et Unix, à l’exception de certains problèmes tels que filepath, etc.).

Le problème est l’implémentation perl de fork dans windows, c’est un pseudo-processus, en fait un thread. S’il vous plaît se référer à l’émulation de fourche perl pour Windows ici .

Il mentionne également les problèmes liés à l’exécution des commandes kill et exec sur les pseudo-processus. Serait-il prudent d’utiliser deux versions différentes de fork pour différentes plates-formes ou devrais-je utiliser des API spécifiques à l’OS?

Forks::Super s’inquiète déjà de beaucoup de ces problèmes de portabilité et vous permet de gérer le code comme

 use Forks::Super; $pid = fork(); if ($pid != 0) { ... if (kill 'ZERO',$pid) { print "Job is running.\n"; } kill 'STOP', $pid; # or $pid->suspend kill 'CONT', $pid; # or $pid->resume kill 'TERM', $pid; # or $pid->terminate waitpid $pid, 0; # or $pid->wait or $pid->waitpid(0) } 

En supposant que vous ayez besoin de processus asynchrones, optez pour les API spécifiques à la plate-forme (si vous pouvez attendre l’enfant, vous pouvez utiliser le system ou qx ).

C’est fork / exec sous UNIX, Win32::Process::Create sous Windows. L’émulation fork sur Windows était un essai courageux, mais les plates-formes sont très différentes dans ce domaine.

Exemple: python a essayé d’unifier les interfaces avec leur module de subprocess . Cela fonctionne pour des choses simples, mais il y a 4 parameters spécifiques à UNIX et 2 spécifiques à Windows (à Popen).