Veröffentlicht am :
Verwaltung CREATION_INTERNE

Killsess - Beenden einer SAS Windows-Sitzung

Dieser Code ist auch verfügbar auf: English Español Français
Attention : Dieser Code erfordert Administratorrechte.
Dieses Makro ist für Windows-Umgebungen (wie Citrix) konzipiert, in denen eine SAS©-Sitzung hängen bleiben kann. Es ermöglicht das Beenden einer anderen SAS©-Sitzung des aktuellen Benutzers mithilfe des Windows-Dienstprogramms 'taskkill'. Es enthält eine Sicherheitsfunktion, um die SAS©-Sitzung, die das Makro ausführt, nicht zu beenden (PID-Überprüfung über &sysjobid).
Datenanalyse

Type : CREATION_INTERNE


Das Skript verwendet keine externen Daten oder SAS-Tabellen. Es basiert vollständig auf der Ausführung von Systembefehlen (CMD) über die X-Anweisung.

1 Codeblock
MACRO DEFINITION
Erklärung :
Definition des Makros und Parameterprüfung. Überprüft, ob die Sitzungsnummer (&sessno) eine gültige Ganzzahl ist. Initialisiert die lokale Variable für Fehlermeldungen.
Kopiert!
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 Codeblock
SYSTEM COMMAND
Erklärung :
Ausführung des Windows-Befehls 'taskkill' über die X-Anweisung. Der Befehl erzwingt das Schließen (/f) der Prozesse, die nach Benutzername und Fenstertitel (entsprechend der Sitzungsnummer) gefiltert sind, während die PID der aktuellen Sitzung (&sysjobid) explizit ausgeschlossen wird, um eine Selbstbeendigung zu vermeiden.
Kopiert!
1x taskkill /f /fi "USERNAME eq &sysuserid" /fi "PID ne &sysjobid" /fi "WINDOWTITLE eq SAS
2Session &sessno.*";
3 
3 Codeblock
MACRO EXIT
Erklärung :
Behandlung des Makroausgangs. Sprungmarken für die Fehlerbehandlung und das Ende der Makrodefinition.
Kopiert!
1 %goto skip;
2 %exit: %put &err: (killsess) Leaving macro due to problem(s) listed;
3 %skip:
4%mend killsess;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : 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
Expertenrat
Expert
Simon
Expert SAS et fondateur.
« Das Makro killsess ist ein unverzichtbares Werkzeug für Power-User in Windows-Umgebungen (wie Citrix oder Remote Desktop). Es löst das Problem von „Geistersitzungen“, die nicht mehr reagieren und Ressourcen blockieren. Durch die Nutzung des nativen Windows-Befehls taskkill ermöglicht es eine Selbsthilfe ohne IT-Support, während intelligente Filter kritische Fehlbedienungen verhindern.

Strategische Empfehlungen
Der PID-Sicherheitsmechanismus: Die Verwendung der automatischen Makrovariable &sysjobid ist entscheidend. Durch den Filter /fi "PID ne &sysjobid" wird verhindert, dass das Makro die aktuelle Sitzung „suizidiert“. Nur so kann der Prozess andere Instanzen sauber beenden und das Ergebnis noch im Log protokollieren.

Präzise Zielsteuerung: Die Kombination aus USERNAME und WINDOWTITLE stellt sicher, dass Sie nur Ihre eigenen Sitzungen beenden und nicht die eines Kollegen auf demselben Server. Zudem erlaubt die Variable &sessno, gezielt eine bestimmte Instanz (z. B. „Session 2“) zu terminieren, während andere produktive Sitzungen unberührt bleiben.

Administrative Voraussetzungen: Da das Makro den System-Shell-Befehl X nutzt, muss die Systemoption XCMD aktiviert sein. Beachten Sie, dass dieser Befehl Windows-spezifisch ist. In einer Linux-basierten Umgebung (wie SAS Viya) würde dieser Aufruf scheitern und müsste durch kill- oder pgrep-Befehle ersetzt werden. »