Доброго времени суток.
Есть замечательная программа FLProg, для написания скетчей для Arduino на языке релейной логики FBD/LAD. Вот только запускается она только через root, что собственно мне не нравится. Автор самой проги по этому поводу ничего не говорит, т.к. он сам в линухах не силен и ему помогли портировать прогу на линукс. Хотел посмотреть где прога стопорится через strace, но ничего понять не смог. Собственно прикладываю выводы strace от root и обычного пользователя. Может кто что-нибудь подскажет.
execve("/opt/FLProgLinux64/FLProg", ["/opt/FLProgLinux64/FLProg"], [/* 22 vars */]) = 0
brk(NULL) = 0x55961be3a000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0dfd5ca000
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=138517, ...}) = 0
mmap(NULL, 138517, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f0dfd5a8000
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\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\t\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1864888, ...}) = 0
mmap(NULL, 3967392, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f0dfcfde000
mprotect(0x7f0dfd19d000, 2097152, PROT_NONE) = 0
mmap(0x7f0dfd39d000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bf000) = 0x7f0dfd39d000
mmap(0x7f0dfd3a3000, 14752, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f0dfd3a3000
close(3) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0dfd5a7000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0dfd5a6000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0dfd5a5000
arch_prctl(ARCH_SET_FS, 0x7f0dfd5a6700) = 0
mprotect(0x7f0dfd39d000, 16384, PROT_READ) = 0
mprotect(0x55961a90d000, 8192, PROT_READ) = 0
mprotect(0x7f0dfd5cc000, 4096, PROT_READ) = 0
munmap(0x7f0dfd5a8000, 138517) = 0
getuid() = 0
getgid() = 0
getpid() = 9418
rt_sigaction(SIGCHLD, {0x55961a701540, ~[RTMIN RT_1], SA_RESTORER, 0x7f0dfd0134b0}, NULL, 8) = 0
geteuid() = 0
brk(NULL) = 0x55961be3a000
brk(0x55961be5b000) = 0x55961be5b000
getppid() = 9416
stat("/home/dmitriy", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat(".", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/opt/FLProgLinux64/FLProg", O_RDONLY) = 3
fcntl(3, F_DUPFD, 10) = 10
close(3) = 0
fcntl(10, F_SETFD, FD_CLOEXEC) = 0
geteuid() = 0
getegid() = 0
rt_sigaction(SIGINT, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGINT, {0x55961a701540, ~[RTMIN RT_1], SA_RESTORER, 0x7f0dfd0134b0}, NULL, 8) = 0
rt_sigaction(SIGQUIT, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER, 0x7f0dfd0134b0}, NULL, 8) = 0
rt_sigaction(SIGTERM, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGTERM, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER, 0x7f0dfd0134b0}, NULL, 8) = 0
read(10, "#!/bin/sh\ncd /opt/FLProgLinux64/"..., 8192) = 46
chdir("/opt/FLProgLinux64") = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f0dfd5a69d0) = 9419
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 9419
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=9419, si_uid=0, si_status=0, si_utime=230, si_stime=26} ---
rt_sigreturn({mask=[]}) = 9419
read(10, "", 8192) = 0
exit_group(0) = ?
+++ exited with 0 +++
execve("/opt/FLProgLinux64/FLProg", ["/opt/FLProgLinux64/FLProg"], [/* 63 vars */]) = 0
brk(NULL) = 0x5602b5e4c000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7feee0da8000
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=138517, ...}) = 0
mmap(NULL, 138517, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7feee0d86000
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\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\t\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1864888, ...}) = 0
mmap(NULL, 3967392, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7feee07bc000
mprotect(0x7feee097b000, 2097152, PROT_NONE) = 0
mmap(0x7feee0b7b000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bf000) = 0x7feee0b7b000
mmap(0x7feee0b81000, 14752, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7feee0b81000
close(3) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7feee0d85000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7feee0d84000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7feee0d83000
arch_prctl(ARCH_SET_FS, 0x7feee0d84700) = 0
mprotect(0x7feee0b7b000, 16384, PROT_READ) = 0
mprotect(0x5602b5791000, 8192, PROT_READ) = 0
mprotect(0x7feee0daa000, 4096, PROT_READ) = 0
munmap(0x7feee0d86000, 138517) = 0
getuid() = 1000
getgid() = 1000
getpid() = 9461
rt_sigaction(SIGCHLD, {0x5602b5585540, ~[RTMIN RT_1], SA_RESTORER, 0x7feee07f14b0}, NULL, 8) = 0
geteuid() = 1000
brk(NULL) = 0x5602b5e4c000
brk(0x5602b5e6d000) = 0x5602b5e6d000
getppid() = 9459
stat("/home/dmitriy", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat(".", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/opt/FLProgLinux64/FLProg", O_RDONLY) = 3
fcntl(3, F_DUPFD, 10) = 10
close(3) = 0
fcntl(10, F_SETFD, FD_CLOEXEC) = 0
geteuid() = 1000
getegid() = 1000
rt_sigaction(SIGINT, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGINT, {0x5602b5585540, ~[RTMIN RT_1], SA_RESTORER, 0x7feee07f14b0}, NULL, 8) = 0
rt_sigaction(SIGQUIT, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER, 0x7feee07f14b0}, NULL, 8) = 0
rt_sigaction(SIGTERM, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGTERM, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER, 0x7feee07f14b0}, NULL, 8) = 0
read(10, "#!/bin/sh\ncd /opt/FLProgLinux64/"..., 8192) = 46
chdir("/opt/FLProgLinux64") = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7feee0d849d0) = 9462
wait4(-1, 0x7ffc2ae6bf5c, 0, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGINT {si_signo=SIGINT, si_code=SI_KERNEL} ---
rt_sigreturn({mask=[]}) = -1 EINTR (Interrupted system call)
wait4(-1, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGINT}], 0, NULL) = 9462
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_KILLED, si_pid=9462, si_uid=1000, si_status=SIGINT, si_utime=48, si_stime=18} ---
rt_sigreturn({mask=[]}) = 9462
rt_sigprocmask(SIG_SETMASK, [], [], 8) = 0
rt_sigaction(SIGINT, {SIG_DFL, [INT], SA_RESTORER|SA_RESTART, 0x7feee07f14b0}, {0x5602b5585540, ~[KILL STOP RTMIN RT_1], SA_RESTORER, 0x7feee07f14b0}, 8) = 0
tgkill(9461, 9461, SIGINT) = 0
--- SIGINT {si_signo=SIGINT, si_code=SI_TKILL, si_pid=9461, si_uid=1000} ---
+++ killed by SIGINT +++