Я пишу свою собственную оболочку (исходный код указан ниже) и устанавливаю для нее оболочку пользователя по умолчанию.
Я вхожу в систему с этим пользователем и набираю ctrl-C, и эта оболочка уничтожается, даже если этот сигнал перехвачен. Однако я запускаю эту оболочку непосредственно из bash
, она работает, как я и ожидал. Что имеет значение.
Результат
Войдите в систему с пользователем, для которого по умолчанию установлена оболочка для моей собственной оболочки:
BMC login:
BMC login: naroot
Password:
BMC > signal = 2
BMC login:
Непосредственно запустить его под bash
:
~# /tmp/systemshell
BMC > signal = 2
BMC > signal = 2
BMC > signal = 2
BMC >
исходный код
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <getopt.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <readline/readline.h>
#include <readline/history.h>
#include <signal.h> // sigaction(), sigsuspend(), sig*()
void signalHandler(int signum) {
signal(SIGINT, signalHandler);
signal(SIGTSTP, signalHandler);
signal(SIGQUIT, SIG_IGN);
signal(SIGTTIN, SIG_IGN);
signal(SIGTTOU, SIG_IGN);
signal(SIGCHLD, SIG_IGN);
printf("signal = %d\n", signum);
}
int main()
{
signal(SIGINT, signalHandler);
signal(SIGTSTP, signalHandler);
signal(SIGQUIT, SIG_IGN);
signal(SIGTTIN, SIG_IGN);
signal(SIGTTOU, SIG_IGN);
signal(SIGCHLD, SIG_IGN);
char *input;
while (1) {
input = readline("BMC > ");
if (input) {
printf("%s\n", input);
free(input);
}
}
return 0;
}