grpc
third_party
libuv
docs
code
signal
libuv/docs/code/signal/main.c
Go to the documentation of this file.
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <unistd.h>
4
#include <
uv.h
>
5
6
uv_loop_t
*
create_loop
()
7
{
8
uv_loop_t
*
loop
= malloc(
sizeof
(
uv_loop_t
));
9
if
(
loop
) {
10
uv_loop_init
(
loop
);
11
}
12
return
loop
;
13
}
14
15
void
signal_handler
(
uv_signal_t
*
handle
,
int
signum)
16
{
17
printf
(
"Signal received: %d\n"
, signum);
18
uv_signal_stop
(
handle
);
19
}
20
21
// two signal handlers in one loop
22
void
thread1_worker
(
void
*userp)
23
{
24
uv_loop_t
*loop1 =
create_loop
();
25
26
uv_signal_t
sig1a, sig1b;
27
uv_signal_init
(loop1, &sig1a);
28
uv_signal_start
(&sig1a,
signal_handler
, SIGUSR1);
29
30
uv_signal_init
(loop1, &sig1b);
31
uv_signal_start
(&sig1b,
signal_handler
, SIGUSR1);
32
33
uv_run
(loop1,
UV_RUN_DEFAULT
);
34
}
35
36
// two signal handlers, each in its own loop
37
void
thread2_worker
(
void
*userp)
38
{
39
uv_loop_t
*loop2 =
create_loop
();
40
uv_loop_t
*loop3 =
create_loop
();
41
42
uv_signal_t
sig2;
43
uv_signal_init
(loop2, &sig2);
44
uv_signal_start
(&sig2,
signal_handler
, SIGUSR1);
45
46
uv_signal_t
sig3;
47
uv_signal_init
(loop3, &sig3);
48
uv_signal_start
(&sig3,
signal_handler
, SIGUSR1);
49
50
while
(
uv_run
(loop2,
UV_RUN_NOWAIT
) ||
uv_run
(loop3,
UV_RUN_NOWAIT
)) {
51
}
52
}
53
54
int
main
()
55
{
56
printf
(
"PID %d\n"
, getpid());
57
58
uv_thread_t
thread1, thread2;
59
60
uv_thread_create
(&thread1,
thread1_worker
, 0);
61
uv_thread_create
(&thread2,
thread2_worker
, 0);
62
63
uv_thread_join
(&thread1);
64
uv_thread_join
(&thread2);
65
return
0;
66
}
async_greeter_server_with_graceful_shutdown.loop
loop
Definition:
async_greeter_server_with_graceful_shutdown.py:59
UV_RUN_NOWAIT
@ UV_RUN_NOWAIT
Definition:
uv.h:256
uv_signal_init
UV_EXTERN int uv_signal_init(uv_loop_t *loop, uv_signal_t *handle)
Definition:
unix/signal.c:317
printf
_Use_decl_annotations_ int __cdecl printf(const char *_Format,...)
Definition:
cs_driver.c:91
main
int main()
Definition:
libuv/docs/code/signal/main.c:54
signal_handler
void signal_handler(uv_signal_t *handle, int signum)
Definition:
libuv/docs/code/signal/main.c:15
uv_thread_join
UV_EXTERN int uv_thread_join(uv_thread_t *tid)
Definition:
libuv/src/unix/thread.c:271
uv_run
UV_EXTERN int uv_run(uv_loop_t *, uv_run_mode mode)
Definition:
unix/core.c:361
UV_RUN_DEFAULT
@ UV_RUN_DEFAULT
Definition:
uv.h:254
uv_loop_init
UV_EXTERN int uv_loop_init(uv_loop_t *loop)
Definition:
loop.c:30
uv_thread_create
UV_EXTERN int uv_thread_create(uv_thread_t *tid, uv_thread_cb entry, void *arg)
Definition:
libuv/src/unix/thread.c:209
uv_signal_stop
UV_EXTERN int uv_signal_stop(uv_signal_t *handle)
Definition:
unix/signal.c:511
uv.h
uv_signal_s
Definition:
uv.h:1561
thread2_worker
void thread2_worker(void *userp)
Definition:
libuv/docs/code/signal/main.c:37
handle
static csh handle
Definition:
test_arm_regression.c:16
create_loop
uv_loop_t * create_loop()
Definition:
libuv/docs/code/signal/main.c:6
uv_thread_t
pthread_t uv_thread_t
Definition:
unix.h:134
uv_loop_s
Definition:
uv.h:1767
thread1_worker
void thread1_worker(void *userp)
Definition:
libuv/docs/code/signal/main.c:22
uv_signal_start
UV_EXTERN int uv_signal_start(uv_signal_t *handle, uv_signal_cb signal_cb, int signum)
Definition:
unix/signal.c:338
grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:17