From 7547ef5c6db6014b4cabc2e4e72933dc46fe086e Mon Sep 17 00:00:00 2001 From: ngxson Date: Mon, 26 Feb 2024 15:41:55 +0100 Subject: [PATCH 1/5] server: twice ctrl+C to exit --- examples/server/server.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/examples/server/server.cpp b/examples/server/server.cpp index 8aadc95a9728f..8f9c86271c728 100644 --- a/examples/server/server.cpp +++ b/examples/server/server.cpp @@ -2768,7 +2768,14 @@ static void append_to_generated_text_from_generated_token_probs(llama_server_con } std::function shutdown_handler; -inline void signal_handler(int signal) { shutdown_handler(signal); } +static bool is_terminating = false; +inline void signal_handler(int signal) { + if (is_terminating) { + exit(0); // force exit the process, in case it hangs + } + is_terminating = true; + shutdown_handler(signal); +} int main(int argc, char **argv) { From 273d985271580bce0684889d007bbac7b2484e66 Mon Sep 17 00:00:00 2001 From: ngxson Date: Mon, 26 Feb 2024 17:30:00 +0100 Subject: [PATCH 2/5] std::atomic_flag --- examples/server/server.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/examples/server/server.cpp b/examples/server/server.cpp index 8f9c86271c728..2f4acf54a6d0b 100644 --- a/examples/server/server.cpp +++ b/examples/server/server.cpp @@ -2768,12 +2768,11 @@ static void append_to_generated_text_from_generated_token_probs(llama_server_con } std::function shutdown_handler; -static bool is_terminating = false; +std::atomic_flag is_terminating = ATOMIC_FLAG_INIT; inline void signal_handler(int signal) { - if (is_terminating) { + if (is_terminating.test_and_set()) { exit(0); // force exit the process, in case it hangs } - is_terminating = true; shutdown_handler(signal); } From ac699991a8e2fe49a92d40ea324b1647616ded89 Mon Sep 17 00:00:00 2001 From: ngxson Date: Tue, 27 Feb 2024 21:20:55 +0100 Subject: [PATCH 3/5] sigint: message --- examples/server/server.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/server/server.cpp b/examples/server/server.cpp index fff05cbdebe0a..ae93fda2c1368 100644 --- a/examples/server/server.cpp +++ b/examples/server/server.cpp @@ -2775,7 +2775,10 @@ std::function shutdown_handler; std::atomic_flag is_terminating = ATOMIC_FLAG_INIT; inline void signal_handler(int signal) { if (is_terminating.test_and_set()) { - exit(0); // force exit the process, in case it hangs + // in case it hangs, we can force terminate the server by hitting Ctrl+C twice + // this is for better developer experience, we can remove when the server is stable enough + printf("SIGINT is received second time, exit immediately...\n"); + exit(1); } shutdown_handler(signal); } From 88f5ae3b3918af9ccccc3cc65660dd7b4ecd0822 Mon Sep 17 00:00:00 2001 From: ngxson Date: Tue, 27 Feb 2024 21:23:39 +0100 Subject: [PATCH 4/5] sigint: stderr --- examples/server/server.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/server/server.cpp b/examples/server/server.cpp index ae93fda2c1368..73ef05716abda 100644 --- a/examples/server/server.cpp +++ b/examples/server/server.cpp @@ -2777,7 +2777,7 @@ inline void signal_handler(int signal) { if (is_terminating.test_and_set()) { // in case it hangs, we can force terminate the server by hitting Ctrl+C twice // this is for better developer experience, we can remove when the server is stable enough - printf("SIGINT is received second time, exit immediately...\n"); + fprintf(stderr, "SIGINT is received second time, exit immediately...\n"); exit(1); } shutdown_handler(signal); From 0fcd27dc12bee927b54cc3975b43db28a45dd388 Mon Sep 17 00:00:00 2001 From: Xuan Son Nguyen Date: Wed, 28 Feb 2024 00:25:49 +0100 Subject: [PATCH 5/5] Update examples/server/server.cpp Co-authored-by: Jared Van Bortel --- examples/server/server.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/server/server.cpp b/examples/server/server.cpp index 73ef05716abda..db9dc39710491 100644 --- a/examples/server/server.cpp +++ b/examples/server/server.cpp @@ -2777,7 +2777,7 @@ inline void signal_handler(int signal) { if (is_terminating.test_and_set()) { // in case it hangs, we can force terminate the server by hitting Ctrl+C twice // this is for better developer experience, we can remove when the server is stable enough - fprintf(stderr, "SIGINT is received second time, exit immediately...\n"); + fprintf(stderr, "Received second interrupt, terminating immediately.\n"); exit(1); } shutdown_handler(signal);