mirror of
https://github.com/troglobit/libite.git
synced 2026-10-13 10:14:42 +00:00
runbg: new helper function inspired by the Infix project
The runbg() function is a delayed execvp() that has double-forked to the background (to not create zombies). It is useful for running commands in the background for APIs that need to return a reply, e.g. a NETCONF RPC to reboot the system. Compared to the original in Infix, this version double forks to reparent itself to PID 1 (init), closes all open files, including stdio. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
1 parent
921afdecb4
commit
92bb0ca399
7 files changed
+135
-3
No files matched your search
@@ -15,6 +15,7 @@
|
||||
/printhdr
|
||||
/progress
|
||||
/rsync
|
||||
/runbg
|
||||
/str
|
||||
/strmatch
|
||||
/systemf
|
||||
|
||||
@@ -30,6 +30,7 @@ TESTS += pidfile
|
||||
TESTS += printhdr
|
||||
TESTS += progress
|
||||
TESTS += rsync
|
||||
TESTS += runbg
|
||||
TESTS += str
|
||||
TESTS += strmatch
|
||||
TESTS += systemf
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
#include "check.h"
|
||||
|
||||
#define file "/tmp/runbg.txt"
|
||||
|
||||
int main(void)
|
||||
{
|
||||
char *cmd[] = {
|
||||
"sh", "-c", "echo 'hello world' > " file, NULL
|
||||
};
|
||||
|
||||
erase(file);
|
||||
test(runbg(cmd, 200000), "Calling runbg");
|
||||
|
||||
if (test(fexist(file), "Verifying %s does not yet exist", file))
|
||||
return 1;
|
||||
|
||||
test(usleep(300000), "Waiting for runbg");
|
||||
|
||||
if (test(!fexist(file), "Verifying %s has been created", file))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in new issue
Block a user