Control C not working (sh in initrd after PXE boot)

Hi.

I boot my embedded target with PXE, using my own initrd. The init script launches a sh. Everything works fine.

The only issue is that the Control C has no effect. So I have no way to kill a running command (e.g ping...)

The stty looks OK (intr = ^C) The keys like ^Q, ^D, ^S work fine.

Is it because the signal is blocked ? Any idea how to make Ctrl C work ?

Thanks

Chris

Reply to
Christophe
Loading thread data ...

For ctrl-c to work, you need a controlling terminal (the TTY column) and a process group. If you have a '?' in the TTY column, ctrl-c won't work. In the past I have seen this happen because of this code in drivers/char/tty_io.c: if (device == SYSCONS_DEV) { struct console *c = console_drivers; while(c && !c->device) c = c->next; if (!c) return -ENODEV; device = c->device(c); filp->f_flags |= O_NONBLOCK; /* Don't let /dev/console block */ noctty = 1; }

Note that O_NOCTTY (no controlling terminal) is forced on whenever /dev/console is opened (noctty = 1). Possible workarounds: 1) Run getty on something other than /dev/console. For example, if you console is on the first serial port, run getty on /dev/ttyS0. I believe this is the "correct" answer. 2) You could also change getty to do a TIOCSCTTY ioctl explicitly after it has opened the terminal. 3) You could remove the forcing of noctty on from tty_io.c

Christ> Hi.

Reply to
Norbert van Bolhuis

Hi.

In fact, I had no /dev/tty. I made a little mknod and now CtrlC is back :)

Thanks for you answer.

Chris

Reply to
Christophe

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.