tkomatsu/minishell

Ctrl+\の挙動

Closed this issue · 5 comments

@kefujiwa

bash-3.2$ pwd <-Ctrl+\の後にenter
/Users/tkomatsu/Documents/42/minishell
bash-3.2$

この挙動が再現できないらしいという話が他のチームのレビューとかで上がっているのですが、再現できるのではというアイデアを見つけました。シグナルの実装はお任せしてしまっているので、見当違いだったら指摘してください。

static void sig_quit(int sig)
{
char *code;
if (g_pid == 0)
ft_putstr_fd("\b\b \b\b", STDOUT);
else
{
code = ft_itoa(sig);
ft_putstr_fd("Quit: ", STDOUT);
ft_putendl_fd(code, STDOUT);
ft_free(code);
g_status = EX_SIGNAL + sig;
}
}

Ctrl+\が押されるとこの関数が実行されます。この時にget_next_input()を呼び出せばstatic変数にそれまで記入済みのものが保存されそうです。
その際get_next_input()でオプションもしくはシグナルで反応して、static char *str[STATIC_MAX]からchar **lineに保存しないように修正する必要は出てきますが。

試してみたけど、うまくいかないですね 😢

シグナルが呼ばれた時点でコアダンプに吐き出されてしまうから追うことはできないってことですかね?
このシグナルのデフォルトの処理が「終了+コアダンプ」ってだけならやっぱりいけそうな気がするんだけどなあ

シグナルの理解があまりできていないのですが、シグナルハンドラが実行された場合それまでの処理は止まりメインループに戻ると思っているのですが、合ってますか?
シグナルが出た時点の処理から再開されるのですね。

https://teratail.com/questions/290080
iwasaさんにたどり着いた笑

解決できないことがわかったので閉じます。