Publié le :
Administration CREATION_INTERNE

Killsess - Terminaison de session SAS Windows

Ce code est également disponible en : Deutsch English Español
Attention : Ce code nécessite des droits administrateur.
Cette macro est conçue pour les environnements Windows (comme Citrix) où une session SAS© peut rester bloquée. Elle permet de tuer une autre session SAS© de l'utilisateur courant en utilisant l'utilitaire Windows 'taskkill'. Elle intègre une sécurité pour ne pas terminer la session SAS© qui exécute la macro (vérification du PID via &sysjobid).
Analyse des données

Type : CREATION_INTERNE


Le script n'utilise aucune donnée externe ni table SAS. Il repose entièrement sur l'exécution de commandes système (CMD) via l'instruction X.

1 Bloc de code
MACRO DEFINITION
Explication :
Définition de la macro et validation des paramètres. Vérifie que le numéro de session (&sessno) est un entier valide. Initialise la variable locale pour les messages d'erreur.
Copié !
1%macro killsess(sessno);
2 %local err;
3 %let err=ERR%str(OR);
4 
5 %IF not %LENGTH(&sessno) %THEN %let sessno=1;
6 %ELSE %IF %LENGTH(%sysfunc(compress(&sessno,1234567890))) %THEN %DO;
7 %put &err: (killsess) You must specify an integer for the SESSION number sessno=&sessno;
8 %goto exit;
9 %END;
2 Bloc de code
SYSTEM COMMAND
Explication :
Exécution de la commande Windows 'taskkill' via l'instruction X. La commande force la fermeture (/f) des processus filtrés (/fi) par nom d'utilisateur et titre de fenêtre (correspondant au numéro de session), tout en excluant explicitement le PID de la session courante (&sysjobid) pour éviter l'auto-terminaison.
Copié !
1x taskkill /f /fi "USERNAME eq &sysuserid" /fi "PID ne &sysjobid" /fi "WINDOWTITLE eq SAS
2Session &sessno.*";
3 
3 Bloc de code
MACRO EXIT
Explication :
Gestion de la sortie de la macro. Étiquettes de saut pour la gestion des erreurs et fin de la définition de la macro.
Copié !
1 %goto skip;
2 %exit: %put &err: (killsess) Leaving macro due to problem(s) listed;
3 %skip:
4%mend killsess;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : This is public domain software. No guarantee as to suitability or accuracy is given or implied. User uses this code entirely at their own risk. Author: Roland Rashleigh-Berry.


Banner
Le Conseil de l'Expert
Expert
Simon
Expert SAS et fondateur.
« La macro killsess répond à une problématique bien connue des administrateurs et utilisateurs de serveurs mutualisés (comme Citrix ou Remote Desktop) : la session SAS "gelée" ou "fantôme". En exploitant l'utilitaire système taskkill, ce script permet de reprendre le contrôle sur son environnement sans solliciter le support informatique, tout en intégrant des garde-fous essentiels.

Recommandations et points de vigilance
Sécurité du PID (Process ID) : L'utilisation de la variable automatique &sysjobid est ici magistrale. Elle permet d'exclure la session active du processus de terminaison (/fi "PID ne &sysjobid"). Sans cette condition, la macro se "suiciderait" avant d'avoir pu nettoyer les autres sessions, ce qui rendrait l'outil inefficace.

Précision du ciblage : Le filtrage par WINDOWTITLE (titre de la fenêtre) associé au &sysuserid garantit que l'utilisateur ne ferme que ses propres sessions et uniquement celle portant le numéro spécifié. C'est une sécurité indispensable pour éviter de fermer accidentellement d'autres instances de SAS qui pourraient être en cours de calcul intensif en arrière-plan.

Contraintes d'exécution : Comme tout appel système via l'instruction X, cette macro requiert que l'option XCMD soit activée sur le serveur. De plus, son usage est strictement limité à Windows. Dans un environnement Linux ou SAS Viya, cette commande échouerait et devrait être remplacée par une combinaison de commandes ps -u et kill -9. »