`SIGTTOU` signal to the background process - bash
As per the post, which says that[emphasis mine]:
If a process within a background job tries to write to a TTY device, the TTY sends a SIGTTOU signal to the entire job. This will normally suspend the job. It is possible to turn off this feature on a per-TTY basis.
If I understand that statement correctly, there should be no output when invoking ls / & since the ls would receive the SIGTTOU signal when trying to write out, which would suspend the running of ls.
But there is output in the terminal when calling ls /&, which is really out of my expectation.
Here is the output:
ls / &
[1] 75297
jhon#desktop:~$ initrd.img lib32 lost+found opencv_4.0.tar.gz sbin tmp vmlinuz
bin data-ceph data2 etc lfs lib64 media opt root srv usr zeus
boot data.bk dev home lib libx32 mnt proc run sys var
#the cursor twinkles until I hit the enter key.
#empty line
[1]+ Done ls /
jhon#desktop:~$
Am I misunderstanding the aforementioned statement? If I am wrong, please let me know.
What's more, it seems that no SIGTOU signal is ever sent to ls. Here is the output of strace ls / &
strace ls / &
[1] 80908
jhon#desktop::~$ execve("/bin/ls", ["ls", "/"], [/* 29 vars */]) = 0
brk(0) = 0x9d8000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=122346, ...}) = 0
mmap(NULL, 122346, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f00e80f2000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0[\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=134296, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f00e80f1000
mmap(NULL, 2238192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f00e7ccb000
mprotect(0x7f00e7ceb000, 2093056, PROT_NONE) = 0
mmap(0x7f00e7eea000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1f000) = 0x7f00e7eea000
mmap(0x7f00e7eec000, 5872, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f00e7eec000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libacl.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\34\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=31168, ...}) = 0
mmap(NULL, 2126336, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f00e7ac3000
mprotect(0x7f00e7aca000, 2093056, PROT_NONE) = 0
mmap(0x7f00e7cc9000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7f00e7cc9000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P \2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1857312, ...}) = 0
mmap(NULL, 3965632, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f00e76fa000
mprotect(0x7f00e78b8000, 2097152, PROT_NONE) = 0
mmap(0x7f00e7ab8000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1be000) = 0x7f00e7ab8000
mmap(0x7f00e7abe000, 17088, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f00e7abe000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libpcre.so.3", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\27\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=252032, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f00e80f0000
mmap(NULL, 2347200, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f00e74bc000
mprotect(0x7f00e74f9000, 2093056, PROT_NONE) = 0
mmap(0x7f00e76f8000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3c000) = 0x7f00e76f8000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\16\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=14664, ...}) = 0
mmap(NULL, 2109744, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f00e72b8000
mprotect(0x7f00e72bb000, 2093056, PROT_NONE) = 0
mmap(0x7f00e74ba000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7f00e74ba000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libattr.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300\20\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=18624, ...}) = 0
mmap(NULL, 2113760, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f00e70b3000
mprotect(0x7f00e70b7000, 2093056, PROT_NONE) = 0
mmap(0x7f00e72b6000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7f00e72b6000
close(3) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f00e80ef000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f00e80ed000
arch_prctl(ARCH_SET_FS, 0x7f00e80ed840) = 0
mprotect(0x7f00e7ab8000, 16384, PROT_READ) = 0
mprotect(0x7f00e72b6000, 4096, PROT_READ) = 0
mprotect(0x7f00e74ba000, 4096, PROT_READ) = 0
mprotect(0x7f00e76f8000, 4096, PROT_READ) = 0
mprotect(0x7f00e7cc9000, 4096, PROT_READ) = 0
mprotect(0x7f00e7eea000, 4096, PROT_READ) = 0
mprotect(0x619000, 4096, PROT_READ) = 0
mprotect(0x7f00e8110000, 4096, PROT_READ) = 0
munmap(0x7f00e80f2000, 122346) = 0
statfs("/sys/fs/selinux", 0x7ffcbb368ce0) = -1 ENOENT (No such file or directory)
statfs("/selinux", 0x7ffcbb368ce0) = -1 ENOENT (No such file or directory)
brk(0) = 0x9d8000
brk(0x9f9000) = 0x9f9000
open("/proc/filesystems", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f00e810f000
read(3, "nodev\tsysfs\nnodev\trootfs\nnodev\tr"..., 1024) = 400
read(3, "", 1024) = 0
close(3) = 0
munmap(0x7f00e810f000, 4096) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0
ioctl(1, TIOCGWINSZ, {ws_row=35, ws_col=169, ws_xpixel=169, ws_ypixel=35}) = 0
stat("/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
openat(AT_FDCWD, "/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
getdents(3, /* 38 entries */, 32768) = 1080
getdents(3, /* 0 entries */, 32768) = 0
close(3) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 89), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f00e810f000
write(1, "VCAST_GUI_SIZES.plist data\t da"..., 140VCAST_GUI_SIZES.plist data data1 dms_windows_server initrd.img lib32 lost+found opencv_4.0.tar.gz reportlog.log sbin tmp vmlinuz
) = 140
write(1, "bin\t\t data-ceph data2 et"..., 96bin data-ceph data2 etc lfs lib64 media opt root srv usr zeus
) = 96
write(1, "boot\t\t data.bk\t dev\t home"..., 88boot data.bk dev home lib libx32 mnt proc run sys var
) = 88
close(1) = 0
munmap(0x7f00e810f000, 4096) = 0
close(2) = 0
exit_group(0) = ?
+++ exited with 0 +++
[1]+ Done strace ls /
Related
Elasticsearch hanging at startup
I try to run Elasticsearch with the default settings, without any data. I just unpack the tarball and run ./bin/elasticsearch. The problem is that it just hangs forever. Nothing in the logs, no output on stdout. This is a machine that has potentially security restrictions and ressource access control policies in place. $ ./bin/elasticsearch -V Version: 5.2.2, Build: f9d9b74/2017-02-24T17:26:45.835Z, JVM: 1.8.0_111 Linux version: $ uname -a Linux [...] 2.6.18-406.el5 #1 SMP Fri May 1 10:37:57 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux $ cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.11 (Tikanga) Java: $ java -version java version "1.8.0_111" Java(TM) SE Runtime Environment (build 1.8.0_111-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode) Tail of strace output: [...] mmap(0x3f61a00000, 2629848, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3f61a00000 mprotect(0x3f61a82000, 2093056, PROT_NONE) = 0 mmap(0x3f61c81000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x81000) = 0x3f61c81000 close(3) = 0 mprotect(0x3f61c81000, 4096, PROT_READ) = 0 access("/path/to/elasticsearch-5.2.2/lib/*", F_OK) = -1 ENOENT (No such file or directory) open("/path/to/elasticsearch-5.2.2/lib/", O_RDONLY|O_NONBLOCK|O_DIRECTORY) = 3 fcntl(3, F_SETFD, FD_CLOEXEC) = 0 getdents(3, /* 35 entries */, 32768) = 1592 getdents(3, /* 0 entries */, 32768) = 0 close(3) = 0 mmap(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x2b25d806b000 mprotect(0x2b25d806b000, 4096, PROT_NONE) = 0 clone(child_stack=0x2b25d816b250, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x2b25d816b9d0, tls=0x2b25d816b940, child_tidptr=0x2b25d816b9d0) = 9136 futex(0x2b25d816b9d0, FUTEX_WAIT, 9136, NULL Trace of a child thread repeatedly prints: futex(0x148e954, FUTEX_WAIT_PRIVATE, 1, {0, 756577000}) = -1 ETIMEDOUT (Connection timed out) futex(0x148e928, FUTEX_WAKE_PRIVATE, 1) = 0 clock_gettime(CLOCK_MONOTONIC, {18698412, 584730159}) = 0 clock_gettime(CLOCK_MONOTONIC, {18698412, 584758159}) = 0 futex(0x148e954, FUTEX_WAIT_PRIVATE, 1, {4, 999972000}) = -1 ETIMEDOUT (Connection timed out) futex(0x148e928, FUTEX_WAKE_PRIVATE, 1) = 0 clock_gettime(CLOCK_MONOTONIC, {18698417, 586260159}) = 0 clock_gettime(CLOCK_MONOTONIC, {18698417, 586288159}) = 0 futex(0x148e954, FUTEX_WAIT_PRIVATE, 1, {4, 999972000}) = -1 ETIMEDOUT (Connection timed out) futex(0x148e928, FUTEX_WAKE_PRIVATE, 1) = 0 clock_gettime(CLOCK_MONOTONIC, {18698422, 586801159}) = 0 clock_gettime(CLOCK_MONOTONIC, {18698422, 586831159}) = 0 futex(0x148e954, FUTEX_WAIT_PRIVATE, 1, {4, 999970000}) = -1 ETIMEDOUT (Connection timed out) futex(0x148e928, FUTEX_WAKE_PRIVATE, 1) = 0 clock_gettime(CLOCK_MONOTONIC, {18698427, 588349159}) = 0 clock_gettime(CLOCK_MONOTONIC, {18698427, 588380159}) = 0 It always block on that same call. I have a very similar machine where Elasticsearch starts just fine. I can't figure out what difference make it start on one machine and hang on the other.
For the record, this issue was caused by a failing NFS mount point. Apparently, Elasticsearch goes through NFS mount points and hangs if one of them is hanged.
Why does Perl's print fail to output anything to STDOUT and STDERR, but writes to a file successfully?
I'm attempting to print to standard out from the following Perl script, but it doesn't produce any output on the screen. It does print to a file, however. #!/usr/bin/perl use warnings; use strict; print "Here's some text\n"; print STDERR "Here's some text\n"; print STDOUT "Here's some text\n"; open FH, ">", "file.txt" or die $!; print FH "Here's some text\n"; I tried checking the version of perl I'm using (perl -v), but that doesn't output anything either. The perl man page tells me I'm using 5.14.2. I'm running the Perl script from a bash prompt from a Raspberry Pi. I saw this similar post Print: producing no output, so I used strace and saw that the output did not include any write commands. strace perl -we'print("a") or die("Can'\''t print: $!\n");' Here's the strace output for the full script: execve("./response", ["./response"], [/* 18 vars */]) = 0 brk(0) = 0xd98000 uname({sys="Linux", node="raspberrypi", ...}) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f99000 access("/etc/ld.so.preload", R_OK) = 0 open("/etc/ld.so.preload", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=44, ...}) = 0 mmap2(NULL, 44, PROT_READ|PROT_WRITE, MAP_PRIVATE, 3, 0) = 0xb6f98000 close(3) = 0 open("/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\270\4\0\0004\0\0\0"..., 512) = 512 lseek(3, 7276, SEEK_SET) = 7276 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1080) = 1080 lseek(3, 7001, SEEK_SET) = 7001 read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 47) = 47 fstat64(3, {st_mode=S_IFREG|0755, st_size=10170, ...}) = 0 mmap2(NULL, 39740, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6f6c000 mprotect(0xb6f6e000, 28672, PROT_NONE) = 0 mmap2(0xb6f75000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0xb6f75000 close(3) = 0 munmap(0xb6f98000, 44) = 0 open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=64456, ...}) = 0 mmap2(NULL, 64456, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb6f5c000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/usr/lib/libperl.so.5.14", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\220\v\2\0004\0\0\0"..., 512) = 512 lseek(3, 1346508, SEEK_SET) = 1346508 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1120) = 1120 lseek(3, 1346184, SEEK_SET) = 1346184 read(3, "A2\0\0\0aeabi\0\1(\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 51) = 51 fstat64(3, {st_mode=S_IFREG|0644, st_size=1347628, ...}) = 0 mmap2(NULL, 1379192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6e0b000 mprotect(0xb6f4f000, 32768, PROT_NONE) = 0 mmap2(0xb6f57000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x144) = 0xb6f57000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/arm-linux-gnueabihf/libdl.so.2", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0(\t\0\0004\0\0\0"..., 512) = 512 lseek(3, 8652, SEEK_SET) = 8652 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1160) = 1160 lseek(3, 8320, SEEK_SET) = 8320 read(3, "A0\0\0\0aeabi\0\1&\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 49) = 49 fstat64(3, {st_mode=S_IFREG|0644, st_size=9812, ...}) = 0 mmap2(NULL, 41136, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6e00000 mprotect(0xb6e02000, 28672, PROT_NONE) = 0 mmap2(0xb6e09000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0xb6e09000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/arm-linux-gnueabihf/libm.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\3201\0\0004\0\0\0"..., 512) = 512 lseek(3, 426468, SEEK_SET) = 426468 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1160) = 1160 lseek(3, 426136, SEEK_SET) = 426136 read(3, "A0\0\0\0aeabi\0\1&\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 49) = 49 fstat64(3, {st_mode=S_IFREG|0644, st_size=427628, ...}) = 0 mmap2(NULL, 458912, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6d8f000 mprotect(0xb6df7000, 28672, PROT_NONE) = 0 mmap2(0xb6dfe000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x67) = 0xb6dfe000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/arm-linux-gnueabihf/libpthread.so.0", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\274V\0\0004\0\0\0"..., 512) = 512 lseek(3, 82712, SEEK_SET) = 82712 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1400) = 1400 lseek(3, 82308, SEEK_SET) = 82308 read(3, "A0\0\0\0aeabi\0\1&\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 49) = 49 fstat64(3, {st_mode=S_IFREG|0755, st_size=116462, ...}) = 0 mmap2(NULL, 123412, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6d70000 mprotect(0xb6d84000, 28672, PROT_NONE) = 0 mmap2(0xb6d8b000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x13) = 0xb6d8b000 mmap2(0xb6d8d000, 4628, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6d8d000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/arm-linux-gnueabihf/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\214y\1\0004\0\0\0"..., 512) = 512 lseek(3, 1215264, SEEK_SET) = 1215264 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1360) = 1360 lseek(3, 1214828, SEEK_SET) = 1214828 read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 47) = 47 fstat64(3, {st_mode=S_IFREG|0755, st_size=1216624, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f98000 mmap2(NULL, 1258784, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6c3c000 mprotect(0xb6d62000, 32768, PROT_NONE) = 0 mmap2(0xb6d6a000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x126) = 0xb6d6a000 mmap2(0xb6d6d000, 9504, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6d6d000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/arm-linux-gnueabihf/libcrypt.so.1", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\30\7\0\0004\0\0\0"..., 512) = 512 lseek(3, 29116, SEEK_SET) = 29116 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1160) = 1160 lseek(3, 28780, SEEK_SET) = 28780 read(3, "A0\0\0\0aeabi\0\1&\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 49) = 49 fstat64(3, {st_mode=S_IFREG|0644, st_size=30276, ...}) = 0 mmap2(NULL, 221504, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6c05000 mprotect(0xb6c0c000, 28672, PROT_NONE) = 0 mmap2(0xb6c13000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6) = 0xb6c13000 mmap2(0xb6c15000, 155968, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6c15000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/arm-linux-gnueabihf/libgcc_s.so.1", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0`\364\0\0004\0\0\0"..., 512) = 512 lseek(3, 130212, SEEK_SET) = 130212 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1160) = 1160 lseek(3, 129880, SEEK_SET) = 129880 read(3, "A2\0\0\0aeabi\0\1(\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 51) = 51 fstat64(3, {st_mode=S_IFREG|0644, st_size=131372, ...}) = 0 mmap2(NULL, 162704, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6bdd000 mprotect(0xb6bfd000, 28672, PROT_NONE) = 0 mmap2(0xb6c04000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1f) = 0xb6c04000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f97000 set_tls(0xb6f976d0, 0xb6f97da8, 0xb6f9c048, 0xb6f976d0, 0xb6f9c048) = 0 mprotect(0xb6c13000, 4096, PROT_READ) = 0 mprotect(0xb6d6a000, 8192, PROT_READ) = 0 mprotect(0xb6d8b000, 4096, PROT_READ) = 0 mprotect(0xb6dfe000, 4096, PROT_READ) = 0 mprotect(0xb6e09000, 4096, PROT_READ) = 0 mprotect(0xb6f57000, 8192, PROT_READ) = 0 mprotect(0x11000, 4096, PROT_READ) = 0 mprotect(0xb6f9b000, 4096, PROT_READ) = 0 munmap(0xb6f5c000, 64456) = 0 set_tid_address(0xb6f97278) = 12607 set_robust_list(0xb6f97280, 0xc) = 0 futex(0xbece6778, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, b6d8c000) = -1 EAGAIN (Resource temporarily unavailable) rt_sigaction(SIGRTMIN, {0xb6d7520c, [], SA_SIGINFO|0x4000000}, NULL, 8) = 0 rt_sigaction(SIGRT_1, {0xb6d750b4, [], SA_RESTART|SA_SIGINFO|0x4000000}, NULL, 8) = 0 rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0 getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0 rt_sigaction(SIGFPE, {SIG_IGN, [FPE], SA_RESTART|0x4000000}, {SIG_DFL, [], 0}, 8) = 0 brk(0) = 0xd98000 brk(0xdb9000) = 0xdb9000 getuid32() = 1001 geteuid32() = 1001 getgid32() = 1004 getegid32() = 1004 open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=1534656, ...}) = 0 mmap2(NULL, 1534656, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb6a66000 close(3) = 0 open("/dev/urandom", O_RDONLY|O_LARGEFILE) = 3 read(3, "~\210\223\234", 4) = 4 close(3) = 0 gettimeofday({1460938704, 307768}, NULL) = 0 readlink("/proc/self/exe", "/usr/bin/perl", 4095) = 13 stat64("/usr/local/lib/site_perl/5.14.2/arm-linux-gnueabihf-thread-multi-64int", 0xbece6368) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/site_perl/5.14.2", 0xbece6368) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/site_perl/arm-linux-gnueabihf-thread-multi-64int", 0xbece6368) = -1 ENOENT (No such file or directory) open("./response", O_RDONLY|O_LARGEFILE) = 3 ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbece627c) = -1 ENOTTY (Inappropriate ioctl for device) _llseek(3, 0, [0], SEEK_CUR) = 0 fcntl64(3, F_SETFD, FD_CLOEXEC) = 0 rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0 brk(0xddb000) = 0xddb000 read(3, "#!/usr/bin/perl\nuse warnings;\nus"..., 8192) = 210 stat64("/etc/perl/warnings.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) stat64("/etc/perl/warnings.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/perl/5.14.2/warnings.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/perl/5.14.2/warnings.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) stat64("/usr/local/share/perl/5.14.2/warnings.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) stat64("/usr/local/share/perl/5.14.2/warnings.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) stat64("/usr/lib/perl5/warnings.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) stat64("/usr/lib/perl5/warnings.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) stat64("/usr/share/perl5/warnings.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) stat64("/usr/share/perl5/warnings.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) stat64("/usr/lib/perl/5.14/warnings.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) stat64("/usr/lib/perl/5.14/warnings.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) stat64("/usr/share/perl/5.14/warnings.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) stat64("/usr/share/perl/5.14/warnings.pm", {st_mode=S_IFREG|0644, st_size=15015, ...}) = 0 open("/usr/share/perl/5.14/warnings.pm", O_RDONLY|O_LARGEFILE) = 4 ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbece5be4) = -1 ENOTTY (Inappropriate ioctl for device) _llseek(4, 0, [0], SEEK_CUR) = 0 read(4, "# -*- buffer-read-only: t -*-\n# "..., 8192) = 8192 read(4, "08\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x"..., 8192) = 6823 read(4, "", 8192) = 0 close(4) = 0 brk(0xdfc000) = 0xdfc000 stat64("/etc/perl/strict.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) stat64("/etc/perl/strict.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/perl/5.14.2/strict.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) stat64("/usr/local/lib/perl/5.14.2/strict.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) stat64("/usr/local/share/perl/5.14.2/strict.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) stat64("/usr/local/share/perl/5.14.2/strict.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) stat64("/usr/lib/perl5/strict.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) stat64("/usr/lib/perl5/strict.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) stat64("/usr/share/perl5/strict.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) stat64("/usr/share/perl5/strict.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) stat64("/usr/lib/perl/5.14/strict.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) stat64("/usr/lib/perl/5.14/strict.pm", 0xbece5d90) = -1 ENOENT (No such file or directory) stat64("/usr/share/perl/5.14/strict.pmc", 0xbece5e10) = -1 ENOENT (No such file or directory) stat64("/usr/share/perl/5.14/strict.pm", {st_mode=S_IFREG|0644, st_size=879, ...}) = 0 open("/usr/share/perl/5.14/strict.pm", O_RDONLY|O_LARGEFILE) = 4 ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbece5be4) = -1 ENOTTY (Inappropriate ioctl for device) _llseek(4, 0, [0], SEEK_CUR) = 0 read(4, "package strict;\n\n$strict::VERSIO"..., 8192) = 879 _llseek(4, 878, [878], SEEK_SET) = 0 _llseek(4, 0, [878], SEEK_CUR) = 0 close(4) = 0 read(3, "", 8192) = 0 open("file.txt", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 4 ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbece614c) = -1 ENOTTY (Inappropriate ioctl for device) _llseek(4, 0, [0], SEEK_CUR) = 0 fstat64(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 fcntl64(4, F_SETFD, FD_CLOEXEC) = 0 rt_sigaction(SIG_0, NULL, {0xb6e18dc4, [TRAP RTMIN RT_1 RT_2 RT_3 RT_12 RT_13 RT_15 RT_16 RT_18 RT_19 RT_20 RT_25 RT_26 RT_27 RT_28 RT_29], SA_SIGINFO|0x85b8}, 8) = -1 EINVAL (Invalid argument) rt_sigaction(SIGHUP, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGINT, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGQUIT, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGILL, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGTRAP, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGABRT, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGBUS, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGFPE, NULL, {SIG_IGN, [FPE], SA_RESTART|0x4000000}, 8) = 0 rt_sigaction(SIGKILL, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGUSR1, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGSEGV, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGUSR2, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGPIPE, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGALRM, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGTERM, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGSTKFLT, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGCONT, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGSTOP, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGTSTP, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGTTIN, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGTTOU, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGURG, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGXCPU, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGXFSZ, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGVTALRM, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGPROF, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGWINCH, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGIO, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGPWR, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGSYS, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_2, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_3, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_4, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_5, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_6, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_7, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_8, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_9, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_10, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_11, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_12, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_13, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_14, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_15, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_16, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_17, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_18, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_19, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_20, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_21, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_22, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_23, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_24, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_25, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_26, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_27, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_28, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_29, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_30, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_31, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGRT_32, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGABRT, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGIO, NULL, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGSYS, NULL, {SIG_DFL, [], 0}, 8) = 0 write(4, "Here's some text\n", 17) = 17 close(4) = 0 close(3) = 0 exit_group(0) = ? Any ideas about why it's not producing output? A bash script can echo text to standard out just fine. When I run the script in debug mode it does print output. After executing perl -v at the command line the exit code from $? was 0. Executing perl -e'print "foo" or die $!' gave and exit code of 9, but that appears to be due to the die. perl -v > file did not write anything to file. Here is the output of stat STDOUT and the command used to write it to a file: 45826|261126|33188|1|1001|1004|0|0|1461024408|1461035504|1461035504|4096|0 perl -e 'open my $FH, ">file"; print $FH join "|", stat STDOUT '
Before starting reading have a look at the output of this command. Everything is pointing to STDOUT pointing to the incorrect place. ls -l /proc/$$/fd/{1,2} On my system I get this, note it does change as I write this because this was not written in one go. lrwx------ 1 root root 64 May 3 17:01 /proc/27806/fd/1 -> /dev/pts/1 lrwx------ 1 root root 64 May 3 17:01 /proc/27806/fd/2 -> /dev/pts/1 I suspect the above to be similar for you. The stat looks suspicious to me, if I had access to the filesytem I'd search for the inode that it's telling me its writing to ie. sudo find / -printf "%i:\t%p\n"|grep 261126 If when Perl starts it's changing it's stdout etc to the wrong place I'd add a very long sleep to the script then do the search to see where it is. If the file is a regular file and it's on the filesystem this should find it. My stat on STDOUT |dev |inode |mode |link |uid |gid |rdev |size |atime |mtime |ctime |blk |blka |13 |3 |8592 |1 |1000|5 |34816|0 |1462301986|1462301986|1462301958|1024|0 Your stat on STDOUT |dev |inode |mode |link |uid |gid |rdev |size |atime |mtime |ctime |blk |blka |45826 |261126 |33188 |1 |1001|1004|0 |0 |1461024408|1461035504|1461035504|4096|0 On mine my dev has minor number 13 and looks ok when I search for it under devices. If we mask yours off to show major/minor you have... major == 179 minor == 2 Note, I originally had these in reverse until corrected by Wumpus Q. Wumbley. On my machine this is crw------- 1 root root 2, 179 Apr 29 12:50 ptya3 On mine my rdev equates to major == 136 minor == 0 On my Debian system this is /dev/pts/0. Your rdev is 0. I had a quick look round and some people using screen can have problems with /dev/pts/N ie it's not there but that's me guessing. The strace is also really odd, I got the following lines when it wrote on my system: read(3, "#!/usr/bin/perl -w\n#use strict;\n"..., 8192) = 228 read(3, "", 8192) = 0 close(3) = 0 write(1, "Here's some text STDOUT\n", 24Here's some text STDOUT ) = 24 write(2, "Here's some text STDERR\n", 24Here's some text STDERR ) = 24 write(1, "Here's some text STDOUT\n", 24Here's some text STDOUT ) = 24 The fact that these appear no where in your strace is very strange indeed. You can change where the appear by messing around with $| but they should appear somewhere. Gilles noticed that the mode is also odd. If you run this script... #!/usr/bin/perl use warnings; use strict; use Fcntl ':mode'; my $mode = 33188; my $user_rwx = ($mode & S_IRWXU) >> 6; print("user_rwx = $user_rwx\n"); my $group_read = ($mode & S_IRGRP) >> 3; print("group_read = $group_read\n"); my $other_execute = $mode & S_IXOTH; print("other_execute = $other_execute\n"); printf "Permissions are %04o\n", S_IMODE($mode), "\n"; my $is_setuid = $mode & S_ISUID; print("is_setuid = $is_setuid\n"); my $is_directory = S_ISDIR($mode); print("dir = $is_directory\n"); my $is_reg = S_ISREG($mode); print("regular = $is_reg\n"); You can see that STDOUT appears to be pointing at a regular file. This would confirm why rdev is zero ie if stdout was redirecting to something that was meant to be a device but actually was just a normal file. I've seen odd things like that happen in chrooted environments where devices were not setup properly. Regardless of buffering being on or off on exit the buffers should have have been flushed ie you would see calls to the write sys call. It's really weird that there are no writes at all in the strace.
There are several interesting clues in the information you've provided: perl -e'print "foo" or die $!' gave an exit code of 9, which is EBADF, implying that STDOUT is pointing to a bad file descriptor. That could either be some arbitrary number (since the underlying file descriptors are just numbers), or it could be a file descriptor which used to be open but is now closed. (That also implies that it's not, say, redirected to /dev/null -- that would result in no output but wouldn't give an error.) Your strace output shows several open and close calls, and they all appear to be paired--no evidence of closing STDOUT. Importantly, the open calls all return FD 3 (and later, FD 4 in a case in which FD 3 is still in use)--on Unix-like systems, open typically returns the lowest unused FD, so this is further evidence that FD 1 (the usual STDOUT) hasn't been closed after your process started. So the implications is that STDOUT is not connected to FD 1, but is associated with some other FD. Running the following should tell you what FD it is: perl -e 'open my $FH, ">", file.txt"; print $FH fileno(STDOUT)' I'm guessing that this will be some arbitrary number, and the result of some problem specific to your installation on your Raspberry Pi--perhaps some corrupt library. But as suggested by Sebastian, you can run lsof to find out what FDs your process has opened (add a sleep to your script to keep it running), or look in /proc. But probably STDOUT is referring to something that isn't actually an open FD. It's a little curious that your strace output doesn't show even error-ing calls to write; that implies that Perl does know that the FD is invalid. Another interesting experiment to try is running this: perl -e 'system qw(echo hello)' If that produces output, then that means that the subprocess is inheriting a still-open FD 1, which is further evidence that Perl is in a bad state and has STDOUT associated with an unexpected FD. Yet another thing to try is this: perl -le 'open(STDOUT, ">&1"); print "hello"' That's an attempt to "fix" STDOUT by re-opening it with an FD dup2()'d from FD 1 (which I'm inferring is still open, and just not associated with STDOUT). If that produces output, then at least it's a possible workaround, though still not an explanation of the original cause (which I fear will remain inscrutable). One side note: Although perl -V isn't giving you any output, you can get the information by running: perl -MConfig -le 'open my $FH, ">", version.txt"; print Config::myconfig(); print foreach Config::local_patches()' The second part, about locally-applied patches, may give a clue as to whether something non-standard was done to the perl you have installed.
Try making a fresh user account and using that to see if the same issue occurs, i would also try it on a newer Perl because i can't reproduce this on a pi that has 5.22 on it. This seems very much like you have something unexpected in your shell, a broken module installation or you have a mysterious prompt command that is gobbling output. The lack of writes to STDOUT and STDERR in your strace suggests they were somehow opened the wrong way before that part of the code ran.
Try adding $|=1 after your use lines: #!/usr/bin/perl use warnings; use strict; $|=1; print "Here's some text\n"; print STDERR "Here's some text\n"; print STDOUT "Here's some text\n"; open FH, ">", "file.txt" or die $!; print FH "Here's some text\n"; Your strace output also shows that the print-to-file is done at script exit, not while the script is running, because of Perl's output buffering. If the $|=1 doesn't help: Try getting the FDs used by your script: #!/usr/bin/perl system "ls -l /proc/$$/fd"; or #!/usr/bin/perl system "lsof -p $$"; They should give you a hint where the output should go.
Opening the unused port & system call open("/dev/tty", ...) writev(7, [{"*** glibc detected *** ", 23}
I am using a Linux platform (3.12.13 & 2.6.35.3),& imx5x series processor. In my program I am using the two serial port for read write operation /dev/ttymxc2 & /dev/ttymxc1 .After some duration the /dev/tty open system call executes which is not a part of my program & the error comes open("/dev/tty", ...) writev(7, [{"* glibc detected * ", 23}. Please suggest some solution ,the port which i am not using in my code still system call executed to open /dev/tty/ . These are some strace log . open("/dev/ttymxc2", O_RDWR|O_NOCTTY|O_NONBLOCK) = 4 nanosleep({0, 200000000}, NULL) = 0 ioctl(4, TCFLSH, 0x2) = 0 ioctl(4, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B9600 opost -isig -icanon -echo ...}) = 0 ioctl(4, SNDCTL_TMR_START or SNDRV_TIMER_IOCTL_TREAD or TCSETS, {B9600 opost -isig -icanon -echo ...}) = 0 open("/dev/ttymxc0", O_RDWR|O_NONBLOCK) = 5 ioctl(5, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B115200 opost -isig -icanon -echo ...}) = 0 ioctl(5, SNDCTL_TMR_START or SNDRV_TIMER_IOCTL_TREAD or TCSETS, {B115200 opost -isig -icanon -echo ...}) = 0 open("/dev/ttymxc1", O_RDWR|O_NOCTTY|O_NONBLOCK) = 6 nanosleep({0, 200000000}, NULL) = 0 ioctl(6, TCFLSH, 0x2) = 0 ioctl(6, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B9600 opost -isig -icanon -echo ...}) = 0 ioctl(6, SNDCTL_TMR_START or SNDRV_TIMER_IOCTL_TREAD or TCSETS, {B9600 opost -isig -icanon -echo ...}) = 0 fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x76f2d000 write(1, "in main \n", 9) = 9 write(1, " Leaving process fun \n", 22) = 22 sigreturn() (mask []) = 71 write(1, "bab0 bab0\n", 11) = 11 open("/dev/tty", O_RDWR|O_NOCTTY|O_NONBLOCK) = 7 writev(7, [{"*** glibc detected *** ", 23}, {"./test11_2", 10}, {": ", 2}, {"double free or corruption (!prev"..., 33}, {": 0x", 4}, {"00bfa0c0", 8}, {" ***\n", 5}], 7) = 85 mmap2(NULL, 2097152, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x76d2d000 munmap(0x76d2d000, 864256) = 0 munmap(0x76f00000, 184320) = 0 mprotect(0x76e00000, 135168, PROT_READ|PROT_WRITE) = 0 rt_sigprocmask(SIG_UNBLOCK, [ABRT], NULL, 8) = 0 write(1, "final out", 9) = 9 gettid() = 8796 tgkill(8796, 8796, SIGABRT) = 0 --- SIGABRT {si_signo=SIGABRT, si_code=SI_TKILL, si_pid=8796, si_uid=0} --- +++ killed by SIGABRT +++
Please suggest some solution You need to fix the heap corruption bug that glibc discovered for you. One way to do that is to run your program under Valgrind, but I don't believe it's available for imx5x. Another way is to run the program with export MALLOC_CHECK_=2. See documentation. Yet another way is to use AddressSanitizer (if your toolchain supports it).
madvise system call with MADV_SEQUENTIAL call takes too long to finish
In my code I am using an external C library and the library calls madvise with MADV_SEQUENTIAL option which takes too long to finish. In my opinion only calling madvise with MADV_SEQUENTIAL is enough for our job. My first question is, why multiple madvise system calls are made, is there a logic in calling madvise with different options sequentially? My second question is, do you have any idea why madvise with MADV_SEQUENTIAL takes too long, sometimes about 1-2 minutes? [root#mymachine ~]# strace -ttT my_compiled_code ... 13:11:35.358982 open("/some/big/file", O_RDONLY) = 8 <0.000010> 13:11:35.359060 fstat64(8, {st_mode=S_IFREG|0644, st_size=953360384, ...}) = 0 <0.000006> 13:11:35.359155 mmap2(NULL, 1073741824, PROT_READ, MAP_SHARED, 8, 0) = 0x7755e000 <0.000007> 13:11:35.359223 madvise(0x7755e000, 1073741824, MADV_NORMAL) = 0 <0.000006> 13:11:35.359266 madvise(0x7755e000, 1073741824, MADV_RANDOM) = 0 <0.000006> 13:11:35.359886 madvise(0x7755e000, 1073741824, MADV_SEQUENTIAL) = 0 <0.000006> 13:11:53.730549 madvise(0x7755e000, 1073741824, MADV_RANDOM) = 0 <0.000013> ... I am using 32-bit linux kernel: 3.4.52-9 [root#mymachine ~]# free -lk total used free shared buffers cached Mem: 4034412 3419344 615068 0 55712 767824 Low: 853572 495436 358136 High: 3180840 2923908 256932 -/+ buffers/cache: 2595808 1438604 Swap: 4192960 218624 3974336 [root#mymachine ~]# cat /proc/buddyinfo Node 0, zone DMA 89 23 9 4 5 4 4 1 0 2 0 Node 0, zone Normal 9615 7099 3997 1723 931 397 78 0 0 1 1 Node 0, zone HighMem 7313 8089 2187 420 206 92 41 15 8 3 6
Oracle 9 ProC precompiler segfault while reading pcsus.msb
I'm trying to compile an old piece of software which includes the use of the ProC pre-compiler for Oracle. This software runs using Oracle 9 under Solaris 10, and uses the proc tool to convert .proc files to .c files before the real compiler runs to conver the .c to .o When I try to run proc for any of the .proc files this happens. # /avacm/nproducts//oracle/source/solaris_2.9/9.2/bin/proc define=__sun define=PRE_COMP code=ansi_c mode=oracle def_sqlcode=yes threads=yes include=/usr/include include=../../../../../include include=../../../../../include/rpcsvc include=../../../../../aam/include include=../../../../../aam/libs/libavaora/include datahost.proc Pro*C/C++: Release 9.2.0.6.0 - Production on Tue Jul 26 19:06:20 2011 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. System default option values taken from: /avacm/nproducts//oracle/source/solaris_2.9/9.2//precomp/admin/pcscfg.cfg Segmentation Fault (core dumped) I then tries using truss to see what is actually happening. # truss -vall -wall -fall /avacm/nproducts//oracle/source/solaris_2.9/9.2/bin/proc define=__sun define=PRE_COMP code=ansi_c mode=oracle def_sqlcode=yes threads=yes include=/usr/include include=../../../../../include include=../../../../../include/rpcsvc include=../../../../../aam/include include=../../../../../aam/libs/libavaora/include datahost.proc And these are the last couple of lines: 15775/1: close(10) = 0 15775/1: open("sys/uio.h", O_RDONLY) Err#2 ENOENT 15775/1: open("/usr/include/sys/uio.h", O_RDONLY) = 10 15775/1: fstat64(10, 0xFFBFB578) = 0 15775/1: d=0x00800000 i=16783 m=0100644 l=1 u=0 g=2 sz=2885 15775/1: at = Jul 26 18:50:45 GMT 2011 [ 1311706245 ] 15775/1: mt = Mar 13 10:41:10 GMT 2009 [ 1236940870 ] 15775/1: ct = May 10 19:03:47 GMT 2011 [ 1305054227 ] 15775/1: bsz=8192 blks=6 fs=ufs 15775/1: brk(0x00A475B0) = 0 15775/1: brk(0x00A495B0) = 0 15775/1: fstat64(10, 0xFFBFB420) = 0 15775/1: d=0x00800000 i=16783 m=0100644 l=1 u=0 g=2 sz=2885 15775/1: at = Jul 26 18:50:45 GMT 2011 [ 1311706245 ] 15775/1: mt = Mar 13 10:41:10 GMT 2009 [ 1236940870 ] 15775/1: ct = May 10 19:03:47 GMT 2011 [ 1305054227 ] 15775/1: bsz=8192 blks=6 fs=ufs 15775/1: ioctl(10, TCGETA, 0xFFBFB504) Err#25 ENOTTY 15775/1: read(10, " / *\t C o p y r i g h t".., 8192) = 2885 15775/1: brk(0x00A495B0) = 0 15775/1: brk(0x00A4B5B0) = 0 15775/1: brk(0x00A4B5B0) = 0 15775/1: brk(0x00A4D5B0) = 0 15775/1: brk(0x00A4D5B0) = 0 15775/1: brk(0x00A4F5B0) = 0 15775/1: read(10, 0x00A45A9C, 8192) = 0 15775/1: llseek(10, 0, SEEK_CUR) = 2885 15775/1: close(10) = 0 15775/1: open("/avacm/nproducts//oracle/source/solaris_2.9/9.2//precomp/mesg/pcpus.msb", O_RDONLY) = 10 15775/1: fcntl(10, F_SETFD, 0x00000001) = 0 15775/1: lseek(10, 0, SEEK_SET) = 0 15775/1: read(10, "1513 "011303\t\t\0\0\0\0".., 256) = 256 15775/1: open("/avacm/nproducts//oracle/source/solaris_2.9/9.2//slax/mesg/pxus.msb", O_RDONLY) Err#2 ENOENT 15775/1: open("/avacm/nproducts//oracle/source/solaris_2.9/9.2//slax/mesg/pxus.msb", O_RDONLY) Err#2 ENOENT 15775/1: close(10) = 0 15775/1: close(9) = 0 15775/1: close(8) = 0 15775/1: open("/avacm/nproducts//oracle/source/solaris_2.9/9.2//precomp/mesg/pcsus.msb", O_RDONLY) = 8 15775/1: fcntl(8, F_SETFD, 0x00000001) = 0 15775/1: lseek(8, 0, SEEK_SET) = 0 15775/1: read(8, "1513 "011303\t\t\0\0\0\0".., 256) = 256 15775/1: Incurred fault #6, FLTBOUNDS %pc = 0x0004CED8 15775/1: siginfo: SIGSEGV SEGV_MAPERR addr=0x00000000 15775/1: Received signal #11, SIGSEGV [default] 15775/1: siginfo: SIGSEGV SEGV_MAPERR addr=0x00000000 What I understand of this, is that while reading the pcsus.msb file, some string handling went wrong and it segfaulted. I tried using different pcsus.msb files I found online, and some gave out different errors, but I cannot make it work. The pstrack output of the core file does not help much either. # pstack core core 'core' of 15803: /avacm/nproducts//oracle/source/solaris_2.9/9.2/bin/proc define=__sun 0004ced8 pcs (0, ffbfeae4, 0, 1, ffbfd788, 2) + 37c 00044dfc pc2main (ffbfeb94, ffbff0ac, 1, 0, 544668, fe6ba518) + 1030 00416d70 lpmcall (51bac0, 51f660, 51bb68, c, ffbff780, 51b7a0) + 46c 004129a4 lpmpmai (4, ffbff534, d, ffbff74c, ff000000, 80808080) + 178 0003e688 main (d, ffbff74c, ffbff784, 513c00, ff2a0100, 0) + f0 0003e570 _start (0, 0, 0, 0, 0, 0) + 108 Any pointers I can try to fix this? Thanks, Javier
I was able to get a fresh Oracle 9i installation and its proc returned an error regarding "lloff_t": PCC-S-02201, Encountered the symbol "lloff_t" when expecting one of the following And I found a solution here: http://www.orafaq.com/forum/t/59837/2/ Which is to add -D__sparc to the proc command line. Javier