Code: Select all
int main(int argc, char **argv, char **envp)
{
signal(SIGQUIT, SIG_IGN);
int pid = fork();
// signal(SIGQUIT, SIG_IGN);
if (pid == 0)
{
signal(SIGQUIT, SIG_DFL);
// execve("/usr/bin/cat", argv, envp);
char buffer[100];
read(0, buffer, 50);
printf("buffer: %s\n", buffer);
return (0);
}
int status;
waitpid(pid, &status, 0);
printf("Status: %i\n", WIFSIGNALED(status));
if (WIFSIGNALED(status))
printf("Signal: %i\n", WTERMSIG(status));
#ifdef WCOREDUMP
if (WCOREDUMP(status))
printf("Core dumped!\n");
#endif
return (0);
}
[*] Ulimit -c Unlimited < BR /> Sigquit vor und nach dem Gabed (siehe Beispielcode) < /li>
Versuchte es mit Execve und "Cat" - gleiches Verhalten < /li>
< LI> Das Programm ohne Fork () verhält sich wie erwartet. BR /> Core_Pattern sagt: | /WSL-Capture-Crash %t %e %p %s < /li>
Ich benutze WSL2 mit Ubuntu, probierte das Programm aber bereits auf einem Schulcomputer aus, der ausgeführt wird "Normal" Ubuntu und das gleiche Verhalten erhalten < /li>
< /ul>
Vielleicht ist dieses Verhalten auch zu erwarten? Aber wenn ja - warum? Der Grund, warum dies überhaupt ein Problem für mich ist, ist, dass meine Schale ähnliche Signale wie Bash behandeln sollte. Am Ende möchte ich, dass sich die Unterbrechung der Katze wie möglich wie möglich von Cat in Bash unterbrochen hat. Wenn dies nicht der Fall ist, möchte ich wirklich wissen, warum es ein anderes Verhalten von Eltern- und Kinderprozessen gibt. < /P>
Vielen Dank im Voraus! Es ist meine erste Frage hier. Bitte lassen Sie es mich bitte auch wissen, wenn ich meine Frage in Zukunft verbessern kann.