[squeak-dev] Re: Unix OSProcess error

Andreas Raab andreas.raab at gmx.de
Thu Aug 6 21:36:35 UTC 2009


David T. Lewis wrote:
> Probably yes. From memory I think that 'cmd closePipes' will do what you
> need. But I'm sure there are cleaner ways to do this, so I'll give you
> a better answer later on when I get home a few hours from now. I guess
> it's time I started carrying one of Bert's Squeak-on-a-stick solutions
> on my keychain ;)

A quick test seems to indicate that no specific cleanup is required 
after the command - I didn't see any extra open handles after running it 
several times. However, there was an odd error earlier on the server in 
question which I had ignored but might turn out related. The error was 
"unsupported primitive, plugin may be out of date" (stack trace below) 
and I am wondering whether that might have killed the grimReaperProcess 
and led to the accumulation of the handles (no clue what might actually 
cause that error; the plugin is up-to-date).

In any case, thanks for the /proc/pid/fd pointer - this is actually 
extremely useful information that I didn't know existed.

Cheers,
   - Andreas

UnixOSProcessAccessor(Object)>>error:
	Receiver: a UnixOSProcessAccessor on pid 7280
	Arguments and temporary variables:
		aString: 	'unsupported primitive, plugin may be out of date'
	Receiver's instance variables:
		dependents: 	#(a UnixProcess with pid 7280)
		sessionIdentifier: 	a ByteArray(77 228 121 74)
		canObtainSessionIdentifierFromPlugin: 	true
		grimReaper: 	a Process in [] in Semaphore>>critical:
		sigChldSemaphore: 	a Semaphore()

UnixOSProcessAccessor>>isAtEndOfFile:
	Receiver: a UnixOSProcessAccessor on pid 7280
	Arguments and temporary variables:
		anIOHandle: 	nil
		atEof: 	nil
	Receiver's instance variables:
		dependents: 	#(a UnixProcess with pid 7280)
		sessionIdentifier: 	a ByteArray(77 228 121 74)
		canObtainSessionIdentifierFromPlugin: 	true
		grimReaper: 	a Process in [] in Semaphore>>critical:
		sigChldSemaphore: 	a Semaphore()

AttachableFileStream(StandardFileStream)>>atEndOfFile
	Receiver: AttachableFileStream: 'pipeReader'
	Arguments and temporary variables:

	Receiver's instance variables:


AttachableFileStream>>upToEndOfFile
	Receiver: AttachableFileStream: 'pipeReader'
	Arguments and temporary variables:
		newStream: 	a WriteStream ''
		buffer: 
'€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€...etc...
	Receiver's instance variables:


ExternalPipe>>upToEndOfFile
	Receiver: an ExternalPipe
	Arguments and temporary variables:

	Receiver's instance variables:
		writer: 	AttachableFileStream: 'pipeWriter'
		reader: 	AttachableFileStream: 'pipeReader'
		blocking: 	false


--- The full stack ---
UnixOSProcessAccessor(Object)>>error:
UnixOSProcessAccessor>>isAtEndOfFile:
AttachableFileStream(StandardFileStream)>>atEndOfFile
AttachableFileStream>>upToEndOfFile
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ExternalPipe>>upToEndOfFile
[] in PipeableOSProcess>>update:
ExternalPipe(Object)>>ifNotNilDo:
PipeableOSProcess>>update:
[] in ExternalUnixOSProcess(Object)>>changed:
DependentsArray>>do:
ExternalUnixOSProcess(Object)>>changed:
ExternalUnixOSProcess(ExternalOSProcess)>>runState:
ExternalUnixOSProcess(ExternalOSProcess)>>complete
ExternalUnixOSProcess>>update:
[] in UnixProcess(ThisOSProcess)>>updateActiveChildren
[] in Dictionary>>do:
Dictionary(Set)>>do:
Dictionary>>do:
UnixProcess(ThisOSProcess)>>updateActiveChildren
UnixProcess>>update:
[] in UnixOSProcessAccessor(Object)>>changed:
DependentsArray>>do:
UnixOSProcessAccessor(Object)>>changed:
[] in [] in UnixOSProcessAccessor>>grimReaperProcess
BlockClosure>>repeat
[] in UnixOSProcessAccessor>>grimReaperProcess
[] in BlockClosure>>newProcess




More information about the Squeak-dev mailing list