Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1799 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  envoie du signal ctrl-d

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

envoie du signal ctrl-d

n°1994127
jaysiat
Posté le 18-05-2010 à 14:58:38  profilanswer
 

Bonjour,
 
J'aimerai que quelqu'un m'apporte son aide si possible dans mon script perl.
 
Je voudrai simplement envoyé le signal "ctrl-d" pour couper la connexion SSH.
L'utilisateur se connecte en ssh sur la machine, la un script est lancé qui lui permet de se crée un compte utilisateur pour une session unbuntu, je voudrai ensuite couper la connexion pour qu'il se reconnecte avec son nouveau compte.
 
Merci de votre aide.

mood
Publicité
Posté le 18-05-2010 à 14:58:38  profilanswer
 

n°1994257
gilou
Modérateur
Modzilla
Posté le 18-05-2010 à 18:35:31  profilanswer
 

En perl, Ctrl-D se représente par \cD donc tu envoies ce caractères la ou il faut.
Tu peux aussi utiliser le fait que Ctrl-D c'est EOT (end of transmission) ie la valeur numérique 4.
http://www.bbdsoft.com/ascii.html
A+,


Message édité par gilou le 18-05-2010 à 18:36:04

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1994355
jaysiat
Posté le 19-05-2010 à 10:44:58  profilanswer
 

merci de ta réponse Gilou.
J'ai essayé print "\cD"; mais sans succès, j'avais également tester la valeur numérique, mais ca ne coupe pas la connexion, il ne se passe rien.

n°1994385
gilou
Modérateur
Modzilla
Posté le 19-05-2010 à 11:32:50  profilanswer
 

Citation :

J'ai essayé print "\cD"; mais sans succès

Sans plus d'info sur comment tu as testé, c'est un peu difficile de t'en dire plus.
Il faudrait nous montrer un peu de code.

 

Il y a un truc qui me turlupine, mais avec le peu d'indications que tu donnes, je ne suis pas sur de ton scénario. Par hasard, tu n'ouvres pas depuis un client un shell SSH sur un serveur sur lequel tu fais executer un script perl? Parce que si le script perl est exécuté sur le serveur, et que le shell SSH est lancé depuis le client, je vois pas trop comment ça pourrait marcher, vu que le Ctrl-D doit être envoyé depuis le client.
Au mieux, un script perl pourrait marcher en récupérant le numéro de process du shell sur le serveur et en lui envoyant un kill
A+,


Message édité par gilou le 19-05-2010 à 11:34:32

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1994422
jaysiat
Posté le 19-05-2010 à 13:39:24  profilanswer
 

Le client se connecte sur la machine unbuntu, ou il lance le script perl. Avec un ctrl-d en ligne de commande je peux couper la connexion SSH, mais avec le script en utilisant print "\cD" cela ne fonctionne pas; En fait il est impossible de le faire de cette manière? J'avais aussi penser a tuer le process.
Merci de ton aide


Message édité par jaysiat le 19-05-2010 à 13:40:51
n°1994424
jaysiat
Posté le 19-05-2010 à 13:44:13  profilanswer
 

sub creation{
 
$email = <STDIN>;
chomp $email;
 
system ("echo $email >> /home/test/mail.log" );
print "\cd";
 
 
 
}

n°1994437
jaysiat
Posté le 19-05-2010 à 14:00:47  profilanswer
 

Qu'est ce que tu penses si l'envoie du caractère EOT est envoyé au niveau des connexion pts/ ?

n°1994452
gilou
Modérateur
Modzilla
Posté le 19-05-2010 à 14:36:31  profilanswer
 

Citation :

print "\cd";


Si j'avais mis le D en majuscule dans ma réponse, ce n'était pas pour des prunes!

 

A+,


Message édité par gilou le 19-05-2010 à 14:43:51

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1994455
black_lord
Truth speaks from peacefulness
Posté le 19-05-2010 à 14:43:37  profilanswer
 

faire "exit" ou "logout" c'est quand même plus simple :D


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1994464
jaysiat
Posté le 19-05-2010 à 15:01:38  profilanswer
 

Désolé le D est bien en majuscule.

mood
Publicité
Posté le 19-05-2010 à 15:01:38  profilanswer
 

n°1994467
jaysiat
Posté le 19-05-2010 à 15:05:47  profilanswer
 

j'ai déja essayer un system ("exit" )  
J'ai le message can't exec "exit" aucun fichier ou dossier de ce type.
Pareil logout ne foncitonne pas.

n°1994503
gilou
Modérateur
Modzilla
Posté le 19-05-2010 à 16:23:24  profilanswer
 

Et
print STDOUT "\cD\n";  
a tout hasard, au cas ou on aurait un pb de buffering
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1994518
jaysiat
Posté le 19-05-2010 à 17:14:02  profilanswer
 

merci de ta réponse mais ca ne fonctionne pas non plus :(

n°1994519
gilou
Modérateur
Modzilla
Posté le 19-05-2010 à 17:17:21  profilanswer
 

Et si tu fais  
print STDOUT "toto\n";  
ça apparait sur ta console?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1994696
jaysiat
Posté le 20-05-2010 à 10:50:02  profilanswer
 

Oui, j'ai bien toto d'afficher.

n°1994757
gilou
Modérateur
Modzilla
Posté le 20-05-2010 à 14:21:24  profilanswer
 

Donc envoyer un caractère CTRL-D ne fait rien. Donc c'est la partie client qui intercepte cette séquence, et non la partie serveur.
Dans ce cas la, tu peux essayer de récupérer le proces id du shell:
$ppid = getppid();
(je suppose que c'est le process père du script, sinon, il faudra filtrer la commande ps pour trouver le bon)
et lancer un kill dessus
kill 9 $ppid;
J'ai mis le signal 9 (SIGKILL), mais a toi de voir lequel est le plus approprié (SIGTERM, SIGQUIT...)
A+,


Message édité par gilou le 20-05-2010 à 14:23:08

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1994758
jaysiat
Posté le 20-05-2010 à 14:26:42  profilanswer
 

merci bien Gilou, j'avais déjà penser à ca mais j'utiliserai cette méthode qu'en dernier recours. Je vais essayer de chercher encore :)

n°1994764
gilou
Modérateur
Modzilla
Posté le 20-05-2010 à 14:42:40  profilanswer
 

Le pb, c'est que le flux de sortie du script perl n'a aucune raison d'être le flux d'entrée de ton secure shell  (et vu la manière donc c'est lancé, je vois pas trop comment le faire, a moins que tu puisses le faire dans la partie shell qui lance le script), donc même si tu fait un print STDOUT "\cD\n"; ca va sur le flux de sortie de ton shell, pas sur son flux d'entrée, donc ça n'a pas d'effet.
Donc c'est plus un pb de shell script que un pb de perl script a la base.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1994769
gilou
Modérateur
Modzilla
Posté le 20-05-2010 à 14:49:38  profilanswer
 

Dans ton shell, tu peux pas recupérer la valeur de fin d'execution de ton script perl, et faite un logout basé sur cette valeur?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1994770
jaysiat
Posté le 20-05-2010 à 14:50:58  profilanswer
 

En tuant le process getppid()-1 ca fonctionne, mais je pourrai pas expliquer pourquoi.
J'ai essayé lancer plusieurs connexion ssh et à tout les coups ca me tue bien la bonne connexion qui à lancer le script.

n°1994781
gilou
Modérateur
Modzilla
Posté le 20-05-2010 à 15:16:30  profilanswer
 

Oui, c'est bizarre, c'est comme s'il y avait un process intermédiaire entre le ssh et le script perl (? un sous shell).
C'est donc un poil risqué cette technique.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1994783
jaysiat
Posté le 20-05-2010 à 15:18:10  profilanswer
 

ssh=>shell=>script ?
Je sais pas si ca fonctionne de cette manière pour les PID

n°1994785
jaysiat
Posté le 20-05-2010 à 15:22:56  profilanswer
 

Je pense que c'est bien ca.
 
Mon ssh a le PID 20139, mon -bash le PID 20140, en lancant mon script shell je récuperer le PPID donc 20140 et je le décrémente de 1, ca tue donc ma session SSH

n°1994792
gilou
Modérateur
Modzilla
Posté le 20-05-2010 à 15:40:46  profilanswer
 

Oui, ca colle, mais il suffit que la bécane ou cela s'exécute soit un poil chargée pour que ca déconne. Le getppid est bon, mais pour trouver le pid de son père, il va falloir le vérifier en filtrant ps, car ça pourrait être autre chose que getppid()-1
Si tu es sous unix, ca doit pouvoir se faire aussi a partir du module Proc::ProcessTable
A+,


Message édité par gilou le 20-05-2010 à 15:41:10

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1994803
Un Program​meur
Posté le 20-05-2010 à 16:14:27  profilanswer
 

Tuer le shell ne suffit pas?


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1994866
gilou
Modérateur
Modzilla
Posté le 20-05-2010 à 19:10:35  profilanswer
 

J'ai pas l'impression que tuer bash suffise a tuer la connexion ssh, sinon il se serait contenté de faire kill 9 sur ppid comme je lui avait suggéré je pense, au lieu de faire cela sur ppid-1  (je peux pas tester, j'ai que windows sous la main, la debian que j'ai sur une partition, si elle a bien trouvé mon réseau WiFi pour l'installation, n'a jamais voulu fonctionner avec une fois le noyeau installé)
A+,


Message édité par gilou le 20-05-2010 à 19:13:10

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1995031
jaysiat
Posté le 21-05-2010 à 11:12:29  profilanswer
 

Je confirme, testé mais cela ne fonctionne pas.

n°1995045
Un Program​meur
Posté le 21-05-2010 à 11:50:41  profilanswer
 

jaysiat a écrit :

Je confirme, testé mais cela ne fonctionne pas.


 
Bizarre, quitter mon shell m'a toujours fait quitter la session ssh. ;)  
 
Tu utilisais quel signal?  (La premiere chose que j'essaierais c'est SIGHUP)


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1995115
jaysiat
Posté le 21-05-2010 à 15:42:07  profilanswer
 

j'ai testé qu'avec le 15.

n°1995129
Un Program​meur
Posté le 21-05-2010 à 15:59:18  profilanswer
 

Ca ne suffit generalement pas a terminer un shell.  Bash par exemple ignore SIGTERM, SIGQUIT et fait des choses mais ne quitte pas avec SIGINT.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1995131
jaysiat
Posté le 21-05-2010 à 16:04:19  profilanswer
 

le signal 1 fonctionne bien :)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  envoie du signal ctrl-d

 

Sujets relatifs
Erreur lors de l'envoie d'un formulaire par mail[résolu] C#/ process cmd.exe et sequence ALT + <020>ou CTRL+T
[Résolu] Envoyer un signal à un autre ordinateur via internethtml, simuler la touche ctrl sur un lien
Ctrl + en Html ?pb capture signal webcam
problème formulaire envoie d'un get au lieu d'un post...envoyer un signal sur de l'usb
envoie de mail en php (mail, ini_set, fsockopen)envoie de mail par SMTP
Plus de sujets relatifs à : envoie du signal ctrl-d


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR