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 
7 {
8  uv_loop_t *loop = malloc(sizeof(uv_loop_t));
9  if (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);
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