Ralf, thanks! That was the idea, a small easy to test program. [NOTE: this email was a log of me debugging. If you want to skip to the issue: it's because the keyboard unit dies when running under tmux because /proc/PID/stat is harder to parse than the keyboard unit code assumes.]
My setup is similar but slightly different: Ubuntu 18.04 and just using a Makefile and the commandline compiler. Am I missing a flag? When I run these: strace -o argh ./test strace -o argh ./test-without-keyboard diff -u argh* --- argh 2019-05-11 08:24:54.015836828 +0100 +++ argh2 2019-05-11 08:25:21.377836828 +0100 @@ -9,26 +9,6 @@ ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0 ioctl(2, TCGETS, {B38400 opost isig icanon echo ...}) = 0 readlink("/proc/self/exe", "/home/kevin/src/sandbox/older/fp"..., 255) = 45 -getpid() = 2158 -mmap(NULL, 32768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7bcbfb894000 -open("/proc/2158/stat", O_RDONLY|O_LARGEFILE) = 3 -read(3, "2158 (test) R 2156 2156 14867 34"..., 256) = 256 -close(3) = 0 -open("/proc/2156/stat", O_RDONLY|O_LARGEFILE) = 3 -read(3, "2156 (strace) S 14867 2156 14867"..., 256) = 256 -close(3) = 0 -mmap(NULL, 32768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7bcbfb88c000 -open("/proc/14867/stat", O_RDONLY|O_LARGEFILE) = 3 -read(3, "14867 (zsh) S 522 14867 14867 34"..., 256) = 256 -close(3) = 0 -open("/proc/522/stat", O_RDONLY|O_LARGEFILE) = 3 -read(3, "522 (tmux: server) S 131 522 522"..., 256) = 256 -write(2, "Runtime error 106 at $0000000000"..., 39) = 39 -write(2, " $000000000042968D\n", 20) = 20 -ioctl(2, TCGETS, {B38400 opost isig icanon echo ...}) = 0 -write(2, " $000000000040018C\n", 20) = 20 -write(2, "\n", 1) = 1 -munmap(0x7bcbfb88c000, 32768) = 0 -munmap(0x7bcbfb894000, 32768) = 0 -exit_group(106) = ? -+++ exited with 106 +++ +write(1, "Hello World.\n", 13) = 13 +exit_group(0) = ? ++++ exited with 0 +++ OK, so it seems to read through the ancestors of its process and dies when it reads the /proc/PID/stat of the tmux process. So, what if I run it without tmux: strace -o argh3 ./test which runs fine and exits cleanly. So what's the difference? diff -u argh{,3} --- argh 2019-05-11 08:24:54.015836828 +0100 +++ argh3 2019-05-11 08:40:16.456836828 +0100 @@ -9,26 +9,31 @@ ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0 ioctl(2, TCGETS, {B38400 opost isig icanon echo ...}) = 0 readlink("/proc/self/exe", "/home/kevin/src/sandbox/older/fp"..., 255) = 45 -getpid() = 2158 -mmap(NULL, 32768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7bcbfb894000 -open("/proc/2158/stat", O_RDONLY|O_LARGEFILE) = 3 -read(3, "2158 (test) R 2156 2156 14867 34"..., 256) = 256 -close(3) = 0 -open("/proc/2156/stat", O_RDONLY|O_LARGEFILE) = 3 -read(3, "2156 (strace) S 14867 2156 14867"..., 256) = 256 -close(3) = 0 -mmap(NULL, 32768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7bcbfb88c000 -open("/proc/14867/stat", O_RDONLY|O_LARGEFILE) = 3 -read(3, "14867 (zsh) S 522 14867 14867 34"..., 256) = 256 -close(3) = 0 -open("/proc/522/stat", O_RDONLY|O_LARGEFILE) = 3 -read(3, "522 (tmux: server) S 131 522 522"..., 256) = 256 -write(2, "Runtime error 106 at $0000000000"..., 39) = 39 -write(2, " $000000000042968D\n", 20) = 20 -ioctl(2, TCGETS, {B38400 opost isig icanon echo ...}) = 0 -write(2, " $000000000040018C\n", 20) = 20 -write(2, "\n", 1) = 1 -munmap(0x7bcbfb88c000, 32768) = 0 -munmap(0x7bcbfb894000, 32768) = 0 -exit_group(106) = ? -+++ exited with 106 +++ +getpid() = 2719 +mmap(NULL, 32768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8092c23000 +open("/proc/2719/stat", O_RDONLY|O_LARGEFILE) = 3 +read(3, "2719 (test) R 2717 2717 2429 348"..., 256) = 256 +close(3) = 0 +open("/proc/2717/stat", O_RDONLY|O_LARGEFILE) = 3 +read(3, "2717 (strace) S 2429 2717 2429 3"..., 256) = 256 +close(3) = 0 +open("/proc/2429/stat", O_RDONLY|O_LARGEFILE) = 3 +read(3, "2429 (zsh) S 2427 2429 2429 3481"..., 256) = 256 +close(3) = 0 +open("/proc/2427/stat", O_RDONLY|O_LARGEFILE) = 3 +read(3, "2427 (ld-linux-x86-64) S 364 242"..., 256) = 256 +close(3) = 0 +open("/etc/timezone", O_RDONLY|O_LARGEFILE) = 3 +read(3, "Etc/UTC\n", 255) = 8 +close(3) = 0 +open("/usr/share/zoneinfo/Etc/UTC", O_RDONLY|O_LARGEFILE) = 3 +read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\0"..., 2048) = 127 +mmap(NULL, 32768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8092c1b000 +close(3) = 0 +time([1557560416]) = 1557560416 +ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0 +write(1, "Hello World.\n", 13) = 13 +munmap(0x7f8092c1b000, 32768) = 0 +munmap(0x7f8092c23000, 32768) = 0 +exit_group(0) = ? ++++ exited with 0 +++ So the code that does this is in this: /usr/share/fpcsrc/3.0.4/rtl/linux/linuxvcs.pp I instrumented it a bit (https://gist.github.com/b110dd08847fbd54e08e8bef803ac5d9) and I see the issue: /proc/5200/stat: 5200 (kbd-test) R 14867 5200 14867 34821 /proc/14867/stat: 14867 (zsh) S 522 14867 14867 34821 /proc/522/stat: 522 (tmux: server) Runtime error 106 at $00000000004006D8 $00000000004006D8 $0000000000400967 $000000000040018C The problem is that /proc/*/stat is kind of hard to parse as this code proves - tmux has rewritten its argv[0] to have a space which breaks the parser here. And don't think the ")" is a delimiter as argv[0] can have a ")" in it. The format seems to imply it needs to be read to the end of the line and parsed backwards: https://www.redhat.com/archives/axp-list/2001-January/msg00355.html In addition ttyname(3) is a POSIX function that would avoid this issue. Kevin On Sat, May 11, 2019 at 6:08 AM Ralf Quint <freedos...@gmail.com> wrote: > > On 5/10/2019 4:42 PM, Kevin Lyda wrote: > > If I remove the uses clause it runs fine. Why is the keyboard unit, > > which isn't even being used, causing this error? > > > > Kevin > > Well, when I got home a short while ago, I tried that small test program > on one of my Linux workstations and it runs just fine... > > FPC 3.04 as installed with Lazarus 2.02 (ok, installed the 3 .deb > packages for fpc, fpc-source and lazarus 2.02 from the lazarus > SourceForge repo), compiled and running on Linux Mint 19.2/64, tried > both Cinnamon and Mate, on two different hosts... > > Ralf > > > --- > This email has been checked for viruses by Avast antivirus software. > https://www.avast.com/antivirus > > _______________________________________________ > fpc-pascal maillist - fpc-pascal@lists.freepascal.org > http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal -- Kevin Lyda Galway, Ireland _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal