Closed tkomatsu closed 3 years ago
試してみたけど、うまくいかないですね 😢
シグナルが呼ばれた時点でコアダンプに吐き出されてしまうから追うことはできないってことですかね?
このシグナルのデフォルトの処理が「終了+コアダンプ」ってだけならやっぱりいけそうな気がするんだけどなあ
シグナルの理解があまりできていないのですが、シグナルハンドラが実行された場合それまでの処理は止まりメインループに戻ると思っているのですが、合ってますか?
シグナルが出た時点の処理から再開されるのですね。
https://teratail.com/questions/290080 iwasaさんにたどり着いた笑
解決できないことがわかったので閉じます。
@kefujiwa
この挙動が再現できないらしいという話が他のチームのレビューとかで上がっているのですが、再現できるのではというアイデアを見つけました。シグナルの実装はお任せしてしまっているので、見当違いだったら指摘してください。
https://github.com/tkomatsu/minishell/blob/a348e7a3fafe378ec72aa5255bb0be4bd8814888/srcs/utils/signal_handler.c#L31-L45 Ctrl+\が押されるとこの関数が実行されます。この時に
get_next_input()
を呼び出せばstatic変数にそれまで記入済みのものが保存されそうです。 その際get_next_input()
でオプションもしくはシグナルで反応して、static char *str[STATIC_MAX]
からchar **line
に保存しないように修正する必要は出てきますが。