OSProcess.st
changeset 23201 70c0a58e1ab5
parent 23184 5527a9f0dfd4
child 23202 d8eaf4da9e34
--- a/OSProcess.st	Tue Jul 10 00:17:07 2018 +0200
+++ b/OSProcess.st	Tue Jul 10 13:54:44 2018 +0200
@@ -13,6 +13,13 @@
 	category:'System-Support'
 !
 
+Object subclass:#ProcessListEntry
+	instanceVariableNames:'executableName processID userName'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:OSProcess
+!
+
 OSProcess subclass:#RemoteOSProcess
 	instanceVariableNames:'host'
 	classVariableNames:'MethodPerHost'
@@ -279,6 +286,39 @@
     ^ 'cmd'
 ! !
 
+!OSProcess class methodsFor:'utilities'!
+
+getTaskList
+    "get a tasklist (Windows OS only)"
+
+    |lines sepIdx entries|
+
+    OperatingSystem isMSWINDOWSlike ifTrue:[
+        lines := (PipeStream outputFromCommand:'tasklist') asStringCollection.
+        sepIdx := lines findFirst:[:line | line startsWith:'=='].
+        sepIdx == 0 ifTrue:[ ^ #() ].
+        entries := (lines from:(sepIdx + 1)) 
+                        collect:[:line |
+                            |s idx executableName processID userName|
+
+                            s := line readStream.
+                            executableName := (s upToMatching:[:ch | ch isDigit]) withoutSeparators.
+                            processID := Integer readFrom:s.
+                            s skipSeparators.
+                            userName := s nextAlphaNumericWord.
+
+                            ProcessListEntry executableName:executableName processID:processID userName:userName
+                        ].
+        ^ entries
+    ] ifFalse:[
+        ^ #()
+    ].
+
+    "
+     self getTaskList
+    "
+! !
+
 !OSProcess methodsFor:'accessing'!
 
 auxStream
@@ -900,6 +940,50 @@
     "Modified: / 30-05-2018 / 13:57:39 / Claus Gittinger"
 ! !
 
+!OSProcess::ProcessListEntry class methodsFor:'documentation'!
+
+documentation
+"
+    documentation to be added.
+
+    [author:]
+        anharman
+
+    [instance variables:]
+
+    [class variables:]
+
+    [see also:]
+
+"
+! !
+
+!OSProcess::ProcessListEntry class methodsFor:'instance creation'!
+
+executableName:executableNameArg processID:processIDArg userName:userNameArg 
+    ^ self new executableName:executableNameArg processID:processIDArg userName:userNameArg 
+! !
+
+!OSProcess::ProcessListEntry methodsFor:'accessing'!
+
+executableName
+    ^ executableName
+!
+
+executableName:executableNameArg processID:processIDArg userName:userNameArg 
+    executableName := executableNameArg.
+    processID := processIDArg.
+    userName := userNameArg.
+!
+
+processID
+    ^ processID
+!
+
+userName
+    ^ userName
+! !
+
 !OSProcess::RemoteOSProcess class methodsFor:'documentation'!
 
 documentation