]> git.proxmox.com Git - mirror_lxc.git/blob - test/lxc_monitor.c
cd297af53000ad4f7a2cf87a2196f1b75fd769a5
[mirror_lxc.git] / test / lxc_monitor.c
1 /*
2 * lxc: linux Container library
3 *
4 * (C) Copyright IBM Corp. 2007, 2008
5 *
6 * Authors:
7 * Daniel Lezcano <dlezcano at fr.ibm.com>
8 *
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
13 *
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 */
23 #include <stdio.h>
24 #include <unistd.h>
25 #include <string.h>
26 #include <libgen.h>
27
28 #include <lxc.h>
29
30 void usage(char *cmd)
31 {
32 fprintf(stderr, "%s <command>\n", basename(cmd));
33 fprintf(stderr, "\t -n <name> : name of the container\n");
34 _exit(1);
35 }
36
37 int main(int argc, char *argv[])
38 {
39 char opt;
40 char *name = NULL;
41 int fds[2];
42 pid_t pid;
43
44 while ((opt = getopt(argc, argv, "n:")) != -1) {
45 switch (opt) {
46 case 'n':
47 name = optarg;
48 break;
49 }
50 }
51
52 if (!name)
53 usage(argv[0]);
54
55 if (pipe(fds)) {
56 perror("pipe");
57 return 1;
58 }
59
60
61
62 pid = fork();
63 if (pid < 0) {
64 perror("fork");
65 return 1;
66 }
67
68 if (!pid) {
69 close(fds[0]);
70 if (lxc_monitor(name, fds[1])) {
71 fprintf(stderr, "failed to monitor %s\n", name);
72 return 1;
73 }
74
75 return 0;
76 }
77
78 close(fds[1]);
79
80 for (;;) {
81 int err, state;
82
83 err = read(fds[0], &state, sizeof(state));
84 if (err < 0) {
85 perror("read");
86 return 1;
87 }
88
89 if (!err) {
90 printf("container has been destroyed\n");
91 return 0;
92 }
93
94 printf("container has changed the state to %d - %s\n",
95 state, state2str(state));
96 }
97
98 return 0;
99 }