[ https://issues.apache.org/jira/browse/DAEMON-92?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12467335 ]
Simone Piunno commented on DAEMON-92: ------------------------------------- I'm sorry you are right. The problem is not for relative vs absolute paths, but execve(2) not searching throught the $PATH. roentgen ~ # cat execve.c #include <unistd.h> #include <stdio.h> int main(int myargc, char **myargv) { char * const argv[] = { NULL }; char * const envp[] = { NULL }; if (myargc > 1) { printf("One round more\n"); execve(myargv[0], argv, envp); return 1; } printf("Hello, world\n"); } roentgen ~ # make execve cc execve.c -o execve roentgen ~ # ./execve 1 One round more Hello, world roentgen ~ # mv execve /usr/bin roentgen ~ # which execve /usr/bin/execve roentgen ~ # execve Hello, world roentgen ~ # execve 1 One round more roentgen ~ # /usr/bin/execve 1 One round more Hello, world roentgen ~ # strace execve 1 execve("/usr/bin/execve", ["execve", "1"], [/* 53 vars */]) = 0 brk(0) = 0x501000 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b73728cf000 uname({sys="Linux", node="roentgen", ...}) = 0 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=182778, ...}) = 0 mmap(NULL, 182778, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b73728d0000 close(3) = 0 open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220\324"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=1314256, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b73728fd000 mmap(NULL, 2330760, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2b73729d0000 mprotect(0x2b7372b00000, 1048576, PROT_NONE) = 0 mmap(0x2b7372c00000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x130000) = 0x2b7372c00000 mmap(0x2b7372c05000, 16520, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2b7372c05000 close(3) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b7372c0a000 arch_prctl(ARCH_SET_FS, 0x2b7372c0a6f0) = 0 mprotect(0x2b7372c00000, 12288, PROT_READ) = 0 mprotect(0x2b73729ce000, 4096, PROT_READ) = 0 munmap(0x2b73728d0000, 182778) = 0 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b73728d0000 write(1, "One round more\n", 15One round more ) = 15 execve("execve", [], [/* 0 vars */]) = -1 ENOENT (No such file or directory) exit_group(1) = ? Process 29655 detached > jsvc fails to execve() self on Linux > ------------------------------------ > > Key: DAEMON-92 > URL: https://issues.apache.org/jira/browse/DAEMON-92 > Project: Commons Daemon > Issue Type: Bug > Affects Versions: 1.0.1 Final > Reporter: Simone Piunno > Fix For: 1.0.1 Final > > Attachments: 1.0.1-execve-self.patch > > > On Linux jsvc execve() itself. > execve() requires an absolute path as the first argument therefore use of > argv[0] only works when jsvc was invoked with a full path. > Executing jsvc as relative path fails with "jsvc error: Cannot execute JSVC > executor process". > On Linux the full path to self is very easy to find: "/proc/self/exe" > I'm attaching a patch fixing this problem and falling back to argv[0] in case > /proc is not mounted. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]