/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class jtux_UProcess */

#ifndef _Included_jtux_UProcess
#define _Included_jtux_UProcess
#ifdef __cplusplus
extern "C" {
#endif
/* Inaccessible static: signalHandlers */
/*
 * Class:     jtux_UProcess
 * Method:    abort
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_abort
  (JNIEnv *, jclass);

/*
 * Class:     jtux_UProcess
 * Method:    chdir
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_chdir
  (JNIEnv *, jclass, jstring);

/*
 * Class:     jtux_UProcess
 * Method:    chroot
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_chroot
  (JNIEnv *, jclass, jstring);

/*
 * Class:     jtux_UProcess
 * Method:    clock
 * Signature: ()J
 */
JNIEXPORT jlong JNICALL Java_jtux_UProcess_clock
  (JNIEnv *, jclass);

/*
 * Class:     jtux_UProcess
 * Method:    execvp
 * Signature: (Ljava/lang/String;[Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_execvp
  (JNIEnv *, jclass, jstring, jobjectArray);

/*
 * Class:     jtux_UProcess
 * Method:    exit
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_exit
  (JNIEnv *, jclass, jint);

/*
 * Class:     jtux_UProcess
 * Method:    _exit
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess__1exit
  (JNIEnv *, jclass, jint);

/*
 * Class:     jtux_UProcess
 * Method:    fchdir
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_fchdir
  (JNIEnv *, jclass, jint);

/*
 * Class:     jtux_UProcess
 * Method:    fork
 * Signature: ()J
 */
JNIEXPORT jlong JNICALL Java_jtux_UProcess_fork
  (JNIEnv *, jclass);

/*
 * Class:     jtux_UProcess
 * Method:    getcwd
 * Signature: (Ljava/lang/StringBuffer;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_getcwd
  (JNIEnv *, jclass, jobject);

/*
 * Class:     jtux_UProcess
 * Method:    getegid
 * Signature: ()J
 */
JNIEXPORT jlong JNICALL Java_jtux_UProcess_getegid
  (JNIEnv *, jclass);

/*
 * Class:     jtux_UProcess
 * Method:    getenv
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_jtux_UProcess_getenv
  (JNIEnv *, jclass, jstring);

/*
 * Class:     jtux_UProcess
 * Method:    geteuid
 * Signature: ()J
 */
JNIEXPORT jlong JNICALL Java_jtux_UProcess_geteuid
  (JNIEnv *, jclass);

/*
 * Class:     jtux_UProcess
 * Method:    getgid
 * Signature: ()J
 */
JNIEXPORT jlong JNICALL Java_jtux_UProcess_getgid
  (JNIEnv *, jclass);

/*
 * Class:     jtux_UProcess
 * Method:    getpgid
 * Signature: (J)J
 */
JNIEXPORT jlong JNICALL Java_jtux_UProcess_getpgid
  (JNIEnv *, jclass, jlong);

/*
 * Class:     jtux_UProcess
 * Method:    getpid
 * Signature: ()J
 */
JNIEXPORT jlong JNICALL Java_jtux_UProcess_getpid
  (JNIEnv *, jclass);

/*
 * Class:     jtux_UProcess
 * Method:    getppid
 * Signature: ()J
 */
JNIEXPORT jlong JNICALL Java_jtux_UProcess_getppid
  (JNIEnv *, jclass);

/*
 * Class:     jtux_UProcess
 * Method:    getrlimit
 * Signature: (ILjtux/UProcess$s_rlimit;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_getrlimit
  (JNIEnv *, jclass, jint, jobject);

/*
 * Class:     jtux_UProcess
 * Method:    getrusage
 * Signature: (ILjtux/UProcess$s_rusage;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_getrusage
  (JNIEnv *, jclass, jint, jobject);

/*
 * Class:     jtux_UProcess
 * Method:    getsid
 * Signature: (J)J
 */
JNIEXPORT jlong JNICALL Java_jtux_UProcess_getsid
  (JNIEnv *, jclass, jlong);

/*
 * Class:     jtux_UProcess
 * Method:    getuid
 * Signature: ()J
 */
JNIEXPORT jlong JNICALL Java_jtux_UProcess_getuid
  (JNIEnv *, jclass);

/*
 * Class:     jtux_UProcess
 * Method:    kill
 * Signature: (JJ)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_kill
  (JNIEnv *, jclass, jlong, jlong);

/*
 * Class:     jtux_UProcess
 * Method:    nice
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_nice
  (JNIEnv *, jclass, jint);

/*
 * Class:     jtux_UProcess
 * Method:    pause
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_pause
  (JNIEnv *, jclass);

/*
 * Class:     jtux_UProcess
 * Method:    pthread_sigmask
 * Signature: (ILjtux/UProcess$sigset_t;Ljtux/UProcess$sigset_t;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_pthread_1sigmask
  (JNIEnv *, jclass, jint, jobject, jobject);

/*
 * Class:     jtux_UProcess
 * Method:    putenv
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_putenv
  (JNIEnv *, jclass, jstring);

/*
 * Class:     jtux_UProcess
 * Method:    setenv
 * Signature: (Ljava/lang/String;Ljava/lang/String;Z)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_setenv
  (JNIEnv *, jclass, jstring, jstring, jboolean);

/*
 * Class:     jtux_UProcess
 * Method:    setegid
 * Signature: (J)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_setegid
  (JNIEnv *, jclass, jlong);

/*
 * Class:     jtux_UProcess
 * Method:    seteuid
 * Signature: (J)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_seteuid
  (JNIEnv *, jclass, jlong);

/*
 * Class:     jtux_UProcess
 * Method:    setgid
 * Signature: (J)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_setgid
  (JNIEnv *, jclass, jlong);

/*
 * Class:     jtux_UProcess
 * Method:    setpgid
 * Signature: (JJ)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_setpgid
  (JNIEnv *, jclass, jlong, jlong);

/*
 * Class:     jtux_UProcess
 * Method:    setrlimit
 * Signature: (ILjtux/UProcess$s_rlimit;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_setrlimit
  (JNIEnv *, jclass, jint, jobject);

/*
 * Class:     jtux_UProcess
 * Method:    setsid
 * Signature: ()J
 */
JNIEXPORT jlong JNICALL Java_jtux_UProcess_setsid
  (JNIEnv *, jclass);

/*
 * Class:     jtux_UProcess
 * Method:    setuid
 * Signature: (J)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_setuid
  (JNIEnv *, jclass, jlong);

/*
 * Class:     jtux_UProcess
 * Method:    sig_get_SIGRTMIN
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_jtux_UProcess_sig_1get_1SIGRTMIN
  (JNIEnv *, jclass);

/*
 * Class:     jtux_UProcess
 * Method:    sig_get_SIGRTMAX
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_jtux_UProcess_sig_1get_1SIGRTMAX
  (JNIEnv *, jclass);

/*
 * Class:     jtux_UProcess
 * Method:    sigaction_x
 * Signature: (ILjtux/UProcess$s_sigaction;Ljtux/UProcess$s_sigaction;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_sigaction_1x
  (JNIEnv *, jclass, jint, jobject, jobject);

/*
 * Class:     jtux_UProcess
 * Method:    sigaddset
 * Signature: (Ljtux/UProcess$sigset_t;I)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_sigaddset
  (JNIEnv *, jclass, jobject, jint);

/*
 * Class:     jtux_UProcess
 * Method:    sigaltstack
 * Signature: (Ljtux/UProcess$stack_t;Ljtux/UProcess$stack_t;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_sigaltstack
  (JNIEnv *, jclass, jobject, jobject);

/*
 * Class:     jtux_UProcess
 * Method:    sigdelset
 * Signature: (Ljtux/UProcess$sigset_t;I)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_sigdelset
  (JNIEnv *, jclass, jobject, jint);

/*
 * Class:     jtux_UProcess
 * Method:    sigemptyset
 * Signature: (Ljtux/UProcess$sigset_t;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_sigemptyset
  (JNIEnv *, jclass, jobject);

/*
 * Class:     jtux_UProcess
 * Method:    sigfillset
 * Signature: (Ljtux/UProcess$sigset_t;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_sigfillset
  (JNIEnv *, jclass, jobject);

/*
 * Class:     jtux_UProcess
 * Method:    siginterrupt
 * Signature: (II)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_siginterrupt
  (JNIEnv *, jclass, jint, jint);

/*
 * Class:     jtux_UProcess
 * Method:    sigismember
 * Signature: (Ljtux/UProcess$sigset_t;I)Z
 */
JNIEXPORT jboolean JNICALL Java_jtux_UProcess_sigismember
  (JNIEnv *, jclass, jobject, jint);

/*
 * Class:     jtux_UProcess
 * Method:    sigpending
 * Signature: (Ljtux/UProcess$sigset_t;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_sigpending
  (JNIEnv *, jclass, jobject);

/*
 * Class:     jtux_UProcess
 * Method:    sigprocmask
 * Signature: (ILjtux/UProcess$sigset_t;Ljtux/UProcess$sigset_t;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_sigprocmask
  (JNIEnv *, jclass, jint, jobject, jobject);

/*
 * Class:     jtux_UProcess
 * Method:    sigqueue
 * Signature: (JILjtux/UProcess$u_sigval;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_sigqueue
  (JNIEnv *, jclass, jlong, jint, jobject);

/*
 * Class:     jtux_UProcess
 * Method:    sigsuspend
 * Signature: (Ljtux/UProcess$sigset_t;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_sigsuspend
  (JNIEnv *, jclass, jobject);

/*
 * Class:     jtux_UProcess
 * Method:    sigtimedwait
 * Signature: (Ljtux/UProcess$sigset_t;Ljtux/UProcess$siginfo_t;Ljtux/UProcess$s_timespec;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_sigtimedwait
  (JNIEnv *, jclass, jobject, jobject, jobject);

/*
 * Class:     jtux_UProcess
 * Method:    sigwait
 * Signature: (Ljtux/UProcess$sigset_t;Ljtux/UUtil$IntHolder;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_sigwait
  (JNIEnv *, jclass, jobject, jobject);

/*
 * Class:     jtux_UProcess
 * Method:    sigwaitinfo
 * Signature: (Ljtux/UProcess$sigset_t;Ljtux/UProcess$siginfo_t;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_sigwaitinfo
  (JNIEnv *, jclass, jobject, jobject);

/*
 * Class:     jtux_UProcess
 * Method:    system
 * Signature: (Ljava/lang/String;)I
 */
JNIEXPORT jint JNICALL Java_jtux_UProcess_system
  (JNIEnv *, jclass, jstring);

/*
 * Class:     jtux_UProcess
 * Method:    times
 * Signature: (Ljtux/UProcess$s_tms;)J
 */
JNIEXPORT jlong JNICALL Java_jtux_UProcess_times
  (JNIEnv *, jclass, jobject);

/*
 * Class:     jtux_UProcess
 * Method:    umask
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_jtux_UProcess_umask
  (JNIEnv *, jclass, jint);

/*
 * Class:     jtux_UProcess
 * Method:    unsetenv
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_jtux_UProcess_unsetenv
  (JNIEnv *, jclass, jstring);

/*
 * Class:     jtux_UProcess
 * Method:    waitpid
 * Signature: (JLjtux/UExitStatus;I)J
 */
JNIEXPORT jlong JNICALL Java_jtux_UProcess_waitpid
  (JNIEnv *, jclass, jlong, jobject, jint);

#ifdef __cplusplus
}
#endif
#endif
