Win32Process.st
author Claus Gittinger <cg@exept.de>
Sat, 06 Jun 2015 14:42:18 +0200
changeset 18452 5724547da8de
parent 14986 5682847cb329
child 18042 2aa6ef1820fe
child 21005 db37d6a3c489
permissions -rw-r--r--
class: UtcTimestamp comment/format in: #utcOffset

"
 COPYRIGHT (c) 1998 by eXept Software AG
              All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"
"{ Package: 'stx:libbasic' }"

Object subclass:#Win32Process
	instanceVariableNames:'command environment directory inStream outStream errorStream pid
		exitStatus finishSema'
	classVariableNames:''
	poolDictionaries:''
	category:'OS-Windows'
!

!Win32Process class methodsFor:'documentation'!

copyright
"
 COPYRIGHT (c) 1998 by eXept Software AG
              All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"
! !

!Win32Process methodsFor:'accessing'!

command
    "return the value of the instance variable 'command' (automatically generated)"

    ^ command

    "Created: / 10.11.1998 / 21:27:07 / cg"
!

command:something
    "set the value of the instance variable 'command' (automatically generated)"

    command := something.

    "Created: / 10.11.1998 / 21:27:07 / cg"
!

directory
    "return the value of the instance variable 'directory' (automatically generated)"

    ^ directory

    "Created: / 10.11.1998 / 21:21:52 / cg"
!

directory:something
    "set the value of the instance variable 'directory' (automatically generated)"

    directory := something.

    "Created: / 10.11.1998 / 21:21:52 / cg"
!

environment
    "return the value of the instance variable 'environment' (automatically generated)"

    ^ environment

    "Created: / 10.11.1998 / 21:26:34 / cg"
!

environment:something
    "set the value of the instance variable 'environment' (automatically generated)"

    environment := something.

    "Created: / 10.11.1998 / 21:27:07 / cg"
!

errorStream
    "return the value of the instance variable 'errorStream' (automatically generated)"

    ^ errorStream

    "Created: / 10.11.1998 / 21:26:34 / cg"
!

errorStream:something
    "set the value of the instance variable 'errorStream' (automatically generated)"

    errorStream := something.

    "Created: / 10.11.1998 / 21:26:34 / cg"
!

exitStatus
    "return the value of the instance variable 'exitStatus' (automatically generated)"

    ^ exitStatus

    "Created: / 10.11.1998 / 21:24:55 / cg"
!

exitStatus:something
    "set the value of the instance variable 'exitStatus' (automatically generated)"

    exitStatus := something.

    "Created: / 10.11.1998 / 21:24:55 / cg"
!

finishSema
    "return the value of the instance variable 'finishSema' (automatically generated)"

    ^ finishSema

    "Created: / 10.11.1998 / 21:21:53 / cg"
!

finishSema:something
    "set the value of the instance variable 'finishSema' (automatically generated)"

    finishSema := something.

    "Created: / 10.11.1998 / 21:21:53 / cg"
!

inStream
    "return the value of the instance variable 'inStream' (automatically generated)"

    ^ inStream

    "Created: / 10.11.1998 / 21:26:34 / cg"
!

inStream:something
    "set the value of the instance variable 'inStream' (automatically generated)"

    inStream := something.

    "Created: / 10.11.1998 / 21:26:34 / cg"
!

outStream
    "return the value of the instance variable 'outStream' (automatically generated)"

    ^ outStream

    "Created: / 10.11.1998 / 21:26:34 / cg"
!

outStream:something
    "set the value of the instance variable 'outStream' (automatically generated)"

    outStream := something.

    "Created: / 10.11.1998 / 21:26:34 / cg"
!

pid
    "return the value of the instance variable 'pid' (automatically generated)"

    ^ pid

    "Created: / 10.11.1998 / 21:21:53 / cg"
!

pid:something
    "set the value of the instance variable 'pid' (automatically generated)"

    pid := something.

    "Created: / 10.11.1998 / 21:21:53 / cg"
! !

!Win32Process methodsFor:'starting'!

startProcess
    finishSema := Semaphore new.

    pid := Processor 
                monitor:[
                    OperatingSystem
                        startProcess:command
                        inputFrom:inStream
                        outputTo:outStream
                        errorTo:errorStream
                        inDirectory:directory.
                ] 
                action:[:status |
                    status stillAlive ifFalse:[
                        exitStatus := status.
                        "/ paranoia?
                        OperatingSystem terminateProcessGroup:pid.
                        OperatingSystem terminateProcess:pid.
                        OperatingSystem closePid:pid.
                        finishSema signal
                    ].
                ].

    pid isNil ifTrue:[
        exitStatus := OperatingSystem osProcessStatusClass processCreationFailure.
        ^ false
    ].

    ^ true.

    "Created: / 10.11.1998 / 21:23:50 / cg"
    "Modified: / 10.11.1998 / 21:33:16 / cg"
! !

!Win32Process class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libbasic/Win32Process.st,v 1.3 2013-03-27 18:19:55 cg Exp $'
!

version_CVS
    ^ '$Header: /cvs/stx/stx/libbasic/Win32Process.st,v 1.3 2013-03-27 18:19:55 cg Exp $'
! !