summaryrefslogtreecommitdiff
path: root/hurd
diff options
context:
space:
mode:
Diffstat (limited to 'hurd')
-rw-r--r--hurd/process_request.defs381
1 files changed, 381 insertions, 0 deletions
diff --git a/hurd/process_request.defs b/hurd/process_request.defs
new file mode 100644
index 00000000..38d05f72
--- /dev/null
+++ b/hurd/process_request.defs
@@ -0,0 +1,381 @@
+/* Definitions for process server interface (request-only version)
+
+ Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+
+This file is part of the GNU Hurd.
+
+The GNU Hurd is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+The GNU Hurd 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 General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU Hurd; see the file COPYING. If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+subsystem process 24000;
+
+#include <hurd/hurd_types.defs>
+
+#ifdef PROCESS_IMPORTS
+PROCESS_IMPORTS
+#endif
+
+type reply_port_t = MACH_MSG_TYPE_MAKE_SEND_ONCE | polymorphic
+ ctype: mach_port_t;
+
+
+/*** Host management ***/
+
+/* Set the hostid for the machine. This should be unique among all
+ machines. By convention, it is the "primary" IP address of the
+ machine. */
+simpleroutine proc_sethostid_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ hostid: int);
+
+/* Get the host id. */
+simpleroutine proc_gethostid_request (
+ process: process_t;
+ ureplyport reply: reply_port_t);
+
+/* Set the hostname for the machine. By convention this is the DNS
+ FQDN for the machine. */
+simpleroutine proc_sethostname_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ hostname: data_t);
+
+/* Get the hostname. */
+simpleroutine proc_gethostname_request (
+ process: process_t;
+ ureplyport reply: reply_port_t);
+
+/* Get the privileged host port and the device master port. */
+simpleroutine proc_getprivports_request (
+ process: process_t;
+ ureplyport reply: reply_port_t);
+
+/* Return all the pids of all live processes. */
+simpleroutine proc_getallpids_request (
+ process: process_t;
+ ureplyport reply: reply_port_t);
+
+/* Set the "standard exec data", used by programs that want predefined
+ values for exec. */
+simpleroutine proc_setexecdata_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ ports: portarray_t;
+ ints: intarray_t);
+
+/* Get the standard exec data */
+simpleroutine proc_getexecdata_request (
+ process: process_t;
+ ureplyport reply: reply_port_t);
+
+/* Request notification with exec_setexecdata on NOTIFY. */
+simpleroutine proc_execdata_notify_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ notify: mach_port_send_t);
+
+/* Return a uname structure for the currently running system. */
+simpleroutine proc_uname_request (
+ process: process_t;
+ ureplyport reply: reply_port_t);
+
+/* Tell the server who we are for inclusion in the uname string. */
+simpleroutine proc_register_version_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ credential: host_priv_t;
+ name: string_t;
+ release: string_t;
+ version: string_t);
+
+/*** Process creation and simple management. ***/
+
+/* There is a 1-1 relationship between tasks and processes; to create
+ a new process, just create a new task and use proc_task2proc. */
+
+/* Change the current authentication of the process. The user should
+ follow this call with a call to auth_user_authenticate. The
+ new_port passed back through the auth server will be
+ MACH_PORT_NULL. */
+simpleroutine proc_reauthenticate_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ rendezvous2: mach_port_send_t);
+
+/* Declare that a task is a child of the caller. The task's state
+ will then inherit from the caller. This call can be made only once
+ per task. */
+simpleroutine proc_child_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ child: task_t);
+
+/* Atomically change the message port of a process. */
+simpleroutine proc_setmsgport_request (
+ process: process_t;
+ replyport reply: reply_port_t;
+ newmsgport: mach_port_t);
+
+/* Cause a task to take over the pid and all other state from an
+ existing task, and kill the old task with task_terminate. The
+ message port will be set to MACH_PORT_NULL. This is principally
+ used for doing exec's with the EXEC_NEWTASK bit set. The request
+ port assigned to NEWTASK does not change. The new task cannot have
+ had proc_child called on its behalf, it cannot have a pgrp, a session,
+ a login name set with proc_setlogin, it cannot have called proc_child,
+ and it cannot have a message port. */
+/* If this call is made for a process which is no longer alive or
+ does not exist, then newtask will be killed (and no error
+ is returned). */
+simpleroutine proc_reassign_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ newtask: task_t);
+
+/* Set the owner of the process. The new owner must be within the
+ current authentication of the caller. */
+simpleroutine proc_setowner_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ owner: uid_t);
+
+/* Get the process ID and the parent process ID, also find out if we
+ are orphaned. */
+simpleroutine proc_getpids_request (
+ process: process_t;
+ ureplyport reply: reply_port_t);
+
+/* Set the locations of ARGV and ENVP which will be examined
+ by proc_getprocargs and proc_getprocenv. */
+simpleroutine proc_set_arg_locations_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ argv: vm_address_t;
+ envp: vm_address_t);
+
+/* Fetch the locations set by proc_set_arg_locations. */
+simpleroutine proc_get_arg_locations_request (
+ process: process_t;
+ ureplyport reply: reply_port_t);
+
+/* Fetch the message port of a process */
+simpleroutine proc_getmsgport_request (
+ process: process_t;
+ replyport reply: reply_port_t;
+ pid: pid_t);
+
+/* Wait for a child process to exit. If pid is zero, it waits for any
+ child in the same pgrp as the parent. If pid is -1, it waits for
+ any child. Otherwise, if pid is negative, it waits for any process
+ in the specified process group. If pid is positive, it waits for
+ the specified process. The exit status and resource usage of the
+ process are returned in status and rusage respectively. */
+simpleroutine proc_wait_request (
+ process: process_t;
+ replyport reply: reply_port_t;
+ pid: pid_t;
+ options: int);
+
+/* Have the process server stop all threads except contthread. */
+simpleroutine proc_dostop_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ contthread: thread_t);
+
+/* Take over exception messages received on MSGPORT. Any exception
+ messages received will be forwarded to FORWARDPORT. In addition,
+ the thread causing the exception will be aborted (with thread_abort)
+ and have its state adjusted (as by thread_set_state). */
+simpleroutine proc_handle_exceptions_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ msgport: mach_port_move_receive_t;
+ forwardport: mach_port_send_t;
+ flavor: int;
+ new_state: thread_state_t);
+
+
+
+/*** Mark bits. Some of these (exec, traced, eg) modify small pieces
+ of the proc server's behavior; others are purely informational. ***/
+
+/* Mark the process as stopped on a signal. */
+simpleroutine proc_mark_stop_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ signo: int);
+
+/* Mark the process as continued after a stop. */
+simpleroutine proc_mark_cont_request (
+ process: process_t;
+ ureplyport reply: reply_port_t);
+
+/* Tell the process server that the process is going away. If it dies
+ without calling this, it will look to the parent like the process
+ died with SIGKILL. This call allows for a cleaner exit. */
+simpleroutine proc_mark_exit_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ status: int);
+
+/* Inform the process server that the process has completed an exec. */
+simpleroutine proc_mark_exec_request (
+ process: process_t;
+ ureplyport reply: reply_port_t);
+
+/* Inform the process server that the process has asked to be traced.
+ The only result of this is to change the behavior of wait by the
+ parent slightly. */
+simpleroutine proc_mark_traced_request (
+ process: process_t;
+ ureplyport reply: reply_port_t);
+
+/* Inform the process server whether SIGCHLD should be sent for stopped
+ child processes. */
+simpleroutine proc_mod_stopchild_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ doit: int);
+
+
+/*** Miscellaneous process information queries. ***/
+
+simpleroutine proc_pid2task_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ pid: pid_t);
+
+simpleroutine proc_task2pid_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ task: task_t);
+
+/* Return the procserver port for the specified task. */
+simpleroutine proc_task2proc_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ task: task_t);
+
+simpleroutine proc_proc2task_request (
+ process: process_t;
+ ureplyport reply: reply_port_t);
+
+simpleroutine proc_pid2proc_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ pid: pid_t);
+
+simpleroutine proc_getprocinfo_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ which: pid_t;
+ flags: int);
+
+simpleroutine proc_getprocargs_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ which: pid_t);
+
+simpleroutine proc_getprocenv_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ which: pid_t);
+
+/* Create a new login collection. The pid of PROCESS will be the id
+ of the collection. All the children (and their children, and so forth) of
+ PROCESS will automatically join the collection. If PROCESS dies its
+ children (and their children, and so forth) will become part of init's
+ process collection. */
+simpleroutine proc_make_login_coll_request (
+ process: process_t;
+ ureplyport reply: reply_port_t);
+
+/* Get the process collection ID for the process specified by pid. */
+simpleroutine proc_getloginid_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ pid: pid_t);
+
+/* Get the pids of all the members of process collection ID. */
+simpleroutine proc_getloginpids_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ id: pid_t);
+
+/* These next two should not actually be used; they are here
+ for "historic reasons." You are not expected to understand this. */
+simpleroutine proc_setlogin_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ logname: string_t);
+
+simpleroutine proc_getlogin_request (
+ process: process_t;
+ ureplyport reply: reply_port_t);
+
+
+/*** Sessions and process groups. ***/
+
+/* Create a new session. The process's pgrp is set to its pid, and
+ becomes the session leader. */
+simpleroutine proc_setsid_request (
+ process: process_t;
+ ureplyport reply: reply_port_t);
+
+/* Return the pid of a process's session leader. */
+simpleroutine proc_getsid_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ pid: pid_t);
+
+/* Get the pgids of all the members of a session. */
+simpleroutine proc_getsessionpgids_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ sid: pid_t);
+
+/* Get the pids of all the members of a session. */
+simpleroutine proc_getsessionpids_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ sid: pid_t);
+
+/* Return a "session ID" port for the session of the caller.
+ This port is generally only available to members of the session.
+ (It has no listener, but is useful for identification purposes.) */
+simpleroutine proc_getsidport_request (
+ process: process_t;
+ ureplyport reply: reply_port_t);
+
+/* Set the process group of a process. */
+simpleroutine proc_setpgrp_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ pid: pid_t;
+ pgrp: pid_t);
+
+/* Get the process group of a process. */
+simpleroutine proc_getpgrp_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ pid: pid_t);
+
+/* Get the pids of all the members of a pgrp. */
+simpleroutine proc_getpgrppids_request (
+ process: process_t;
+ ureplyport reply: reply_port_t;
+ pgrp: pid_t);
+
+