#include "nsIFile.idl"
#include "nsISupports.idl"

[scriptable, uuid(9da0b650-d07e-4617-a18a-250035572ac8)]

interface nsIProcess : nsISupports
{
	void init(in nsIFile executable);
	void initWithPid(in unsigned long pid);
	
	void kill();

    /** XXX what charset? **/
        /** Executes the file this object was initialized with
         * @param blocking Whether to wait until the process terminates before returning or not
         * @param args An array of arguments to pass to the process
         * @param count The length of the args array
         * @return the PID of the newly spawned process */
        unsigned long run(in boolean blocking, [array, size_is(count)] in string args, in unsigned long count);

	readonly attribute nsIFile location;
	readonly attribute unsigned long pid;
	readonly attribute string processName;
	readonly attribute unsigned long processSignature;
	readonly attribute long exitValue;
};

%{C++

#define NS_PROCESS_CONTRACTID "@mozilla.org/process/util;1"
#define NS_PROCESS_CLASSNAME "Process Specification"
%}
