シグナル (SIGUSR1) で readline を中断しようとしていますが、明らかにシグナルが処理されない場合、プログラムは終了し、処理時に readline は何も起こらなかったかのように進行します。readline は、シグナルを使用して中断できるはずです。
私はこの他の質問からアイデアを得ました: readline() 関数からの強制終了
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <readline/readline.h>
#include <pthread.h>
pthread_t main_id;
void *thread_main(void* arg)
{
sleep(10);
pthread_kill(main_id, SIGUSR1);
}
void signal_handler(int sig)
{
puts("got signal");
(void) sig;
}
int main(int argc, char** argv)
{
struct sigaction sa;
sa.sa_handler = signal_handler;
sa.sa_flags = 0;
sigemptyset(&sa.sa_mask);
sigaction(SIGUSR1, &sa, NULL);
main_id = pthread_self();
pthread_t id;
pthread_create(&id, NULL, thread_main, NULL);
char *input = readline("prompt> ");
puts("main thread done");
return 0;
}
出力:
$ ./test
prompt> got signal
enter something
main thread done
$
ありがとう。