2017-09-04 17 views
0

Une question qui est parvenue sur le sshpass mailing list (et aussi sur stack overflow). Sshpass ne fonctionne pas sur HP-UX.Comment faire pour que HPUX adopte un TTY en tant que contrôle

En regardant la sortie ferme, je vois les suivantes:

-u [/tmp/sshpass][14066]{3783827} fork() ................... (returning as child ...) ......... = 14064 {3783821} 

Le processus enfant est 14066.

-u [/tmp/sshpass][14066]{3783827} setpgrp3(2)................................................. [entry] 
-u [/tmp/sshpass][14066]{3783827} setpgrp3(2)................................................. = 14066 

Démarrer une nouvelle session, la déconnexion de la précédente ATS

-u [/tmp/sshpass][14066]{3783827} open(0x400132d0, O_RDWR, 01210)............................. [entry] 
-u [/tmp/sshpass][14066]{3783827} open("/dev/pts/5", O_RDWR, 01210)........................... = 6 

Ouvrez/dev/pts/5 avec les indicateurs O_RDWR. Selon Posix, à ce stade pts/5 est censé devenir le terminal de contrôle pour le nouveau processus . Ceci, évidemment, ne se produit pas.

La page de manuel HP-UX pour open suggère que l'ouverture de/dev/pts/5 aurait dû faire en sorte que ce processus l'adopte en tant que nouveau TTY de contrôle. Je ne sais pas pourquoi cela n'arrive pas, ni l'accès à un système HP-UX pour expérimenter.

Répondre

0

La personne dont c'était le système devait en fait s'adresser à HP pour obtenir une réponse, mais puisque nous avons la réponse maintenant, je l'afficherai ici.

De la page du manuel HPUX termios(7):

Le terminal de contrôle est hérité par un processus enfant au cours d'une fourche () (voir la fourche (2)). Un processus abandonne son terminal de contrôle s'il crée une nouvelle session avec setsid() ou setpgrp() (voir setsid (2) et setpgrp (2)), ou lorsque tous les descripteurs de fichiers associés au terminal de contrôle ont été fermés.

(soulignement ajouté). Pour autant que je sache, la partie en gras est une idiosyncrasie HPUX, et ne fait pas partie de Posix ou, d'ailleurs, d'autres plates-formes Unix.

Le problème est que sshpass ouvre le tty approprié et ferme immédiatement le descripteur de fichier, car il suppose qu'il est déjà défini comme TTY de contrôle du processus. En raison de l'idiosyncrasie HPUX, cela signifie que le TTY devient le TTY de contrôle du processus et s'arrête immédiatement après la fermeture.