-
Notifications
You must be signed in to change notification settings - Fork 0
/
clique.c
63 lines (51 loc) · 1.29 KB
/
clique.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdarg.h>
#include <signal.h>
#include <unistd.h>
#include "dbus-lib.h"
#include "dbus-util.h"
#include "dbus-systemd.h"
static void busy_loop()
{
while (1) {
sleep (5);
}
}
int main(void)
{
int rc;
char *path, *state;
dbus_bus *bus;
dbus_open(DBUS_AUTO, &bus);
pid_t pid = fork();
if (pid == 0) {
busy_loop();
}
printf("pid: %ld\n", (long)pid);
dbus_message *scope;
scope_init(&scope, "clique.scope", NULL, "transient unit test", pid);
scope_memory_limit(scope, 1024 * 1024 * 128);
scope_commit(bus, scope, NULL);
/* char *path; */
/* get the assiociated unit */
rc = get_unit_by_pid(bus, pid, &path);
if (rc < 0) {
printf("failed to get unit path: %s\n", bus->error);
return 1;
}
printf("PATH: %s\n", path);
/* check state */
query_property(bus, path, "org.freedesktop.systemd1.Unit",
"SubState", "s", &state);
printf("State: %s\n", state);
/* kill */
getchar();
unit_kill(bus, path, SIGTERM);
/* check state */
query_property(bus, path, "org.freedesktop.systemd1.Unit",
"SubState", "s", &state);
printf("State: %s\n", state);
}