proc_mgmt: implementation spawn_wait() with nohang flag
[barrelfish] / if / proc_mgmt.if
1 /*
2  * Copyright (c) 2017, ETH Zurich.
3  * All rights reserved.
4  *
5  * This file is distributed under the terms in the attached LICENSE file.
6  * If you do not find this file, copies can be found by writing to:
7  * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
8  */
9
10 interface proc_mgmt "Process management service" {
11   
12     typedef struct {
13         uint8 status;
14     } ps_entry;
15
16   // Add a new spawnd to the process manager's list.
17   message add_spawnd(coreid core, iref iref);
18
19   // Spawn a new domain, returning its domain cap.
20   rpc spawn(in coreid core,
21             in String path[2048],
22             in char argvbuf[argvbytes, 2048],
23             in char envbuf[envbytes, 2048],
24             in uint8 flags,
25             out errval err,
26             out cap domain_cap);
27
28   rpc spawn_with_caps(in coreid core,
29                       in String path[2048],
30                       in char argvbuf[argvbytes, 2048],
31                       in char envbuf[envbytes, 2048],
32                       in cap inheritcn_cap,
33                       in cap argcn_cap,
34                       in uint8 flags,
35                       out errval err,
36                       out cap domain_cap);
37
38   // Span a new core for a given domain, based on provided vroot and dispframe.
39   rpc span(in cap domain_cap, in coreid core, in cap vroot, in cap dispframe,
40            out errval err);
41
42   // Kill a domain for which the caller has a domain cap.
43   rpc kill(in cap domain_cap, out errval err);
44
45   // Let the process manager know the caller has finished execution.
46   //message exit(cap domain_cap, uint8 status);
47   rpc exit(in cap domain_cap, in uint8 status);
48
49   rpc wait(in cap domain_cap, in bool nohang, out errval err, out uint8 status);
50
51
52   rpc status(in domainid domain_id, out ps_entry ps_entry, out char argv[len, 2048],
53              out errval err);
54
55   // XXX: Should be domainid instead of uint8, but it's not yet supported
56   rpc get_domainlist(out uint8 domains[len, 2048]);
57 };