My application running on embedded linux (busybox) tries to execute a script via popen(cmd, "r")
.
cmd = "sh /tmp/DF1_05/update.sh DF1_05"
I can execute this script without problem launching it by hand from sh, but it fails when it’s launched by the application.
The first lines of update.sh
script are:
#!/bin/sh echo "Starting update script" ....
I cannot even see the echo
ouput.
My application’s code is:
sprintf(cmd,"sh /tmp/%s/update.sh %s",version_ihm_usb,version_ihm_usb); printf("Executing script %sn", cmd); pipe_cmd = popen(cmd,"r"); if (pipe_cmd != NULL) { int ret = pclose(pipe_cmd); printf("pclose returned %d:%d,%dn", ret, WIFEXITED(ret), WEXITSTATUS(ret)); return 0; } else { printf("Error executing script : %sn", strerror(errno)); }
The application output is:
Executing script sh /tmp/DF1_05/update.sh DF1_05 pclose returned 36096:1,141
So according to popen man page, pclose
outputs a status similar to what wait4 outputs and as WIFEXITED(ret)
is true, WEXITSTATUS(ret)
is the output status of the child …….
Ok but after that it’s a treasure hunt for me and in fact, I cannot interpret what code 141
is.
Does anyone have more precise info?
Advertisement
Answer
I cannot interpret what code 141 is.
From man popen emphasis mine:
The popen() function opens a process by creating a pipe, forking, and invoking the shell.
From bash manual, which is a common convention:
When a command terminates on a fatal signal whose number is N, Bash uses the value 128+N as the exit status.
From man signal:
Signal x86/ARM Alpha/ MIPS PARISC Notes most others SPARC ───────────────────────────────────────────────────────────────── SIGHUP 1 1 1 1 .... other signals .... SIGPIPE 13 13 13 13
The process was terminated by SIGPIPE
. SIGPIPE
is 13 on your system. So your shell returned the exit status as 128 + 13 = 141
.