/*
    GDAM - Geoff & Dave's Audio Mixer
    Copyright (C) 1999    Dave Benson, Geoff Matters.

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA

    Contact:
        daveb@ffem.org <Dave Benson>
        geoff@ugcs.caltech.edu <Geoff Matters>
*/

#ifndef __GDAM_WAIT_PID_H_
#define __GDAM_WAIT_PID_H_

#include <glib.h>


typedef struct _GdamWaitPidInfo GdamWaitPidInfo;
struct _GdamWaitPidInfo {
	int			pid;
	gboolean		exited;   /* exit(2) or killed by signal? */
	union {
		int		signal;		/* !exited */
		int		exit_status;	/*  exited */
	} d;
	gboolean		dumped_core;
};

typedef void    (*GdamWaitPidFunc)    (gpointer           user_data,
                                       GdamWaitPidInfo*   info);

/* Register a function that will be called back when a specified pid dies
 * or exits. */
void       gdam_wait_pid          (int                 pid,
                                   GdamWaitPidFunc     wait_func,
                                   gpointer            wait_func_data,
				   GDestroyNotify      destroy);

void       gdam_wait_pid_remove   (int                 pid);


/* Kill a process -TERM, then if millis_til_sigkill elapses and
 * we have not reaped the process, kill it -KILL and wait again.
 * Finally, print a warning if that fails.
 */
void       gdam_wait_pid_kill_pid (int                 pid,
                                   int                 millis_til_sigkill);

#endif
