ProcessTools Some things to help interact with *n*x processes


Quick intro to the main functions (run each line, watch the post window, wait for a bit):


"sleep 3".unixCmd

"sleep 3".unixCmdInferPID({|pid| ("The PID is" + pid).postln})

"sleep 3".unixCmdThen({|pid| ("The PID was" + pid ++ "; the program has completed").postln})



thor:

"python pyprog.py".unixCmdInferPID({|pid| p = pid; ("The PID is" + pid).postln})


("kill "++p.asString).unixCmd



This toolbox contains the following:


String:unixCmdInferPID(action)


This is like unixCmd except that it also infers the PID that the launched process takes on. This is useful for monitoring long-running processes. The "action" argument is launched once the PID is known.


String:unixCmdThen(action, checkevery)


Runs unixCmd then monitors the process, waiting until it completes.


String:unixCmdGetStdOut


Uses a Pipe to run a command and grab all of the standard output into a string, which is returned.


Integer:isPIDRunning


Checks to see if a UNIX process with PID matching the integer is running.


Score:recordNRTThen


Just like Score's recordNRT methods except wrapped up in the unixCmdThen method described above. This is particularly helpful for running [Non-Realtime-Synthesis] processes and then automatically doing something else once the rendering is complete.