diff options
author | Felix Fietkau <nbd@openwrt.org> | 2013-10-21 15:49:11 +0200 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2013-10-22 14:10:33 +0200 |
commit | f80b9e4acc47cf454768b44142495fdb8a68a39f (patch) | |
tree | 799f4f70ae544067ba2135746a3265a907613ef4 /utils.c | |
parent | 381f47c5af62cec173528f5f539558d7a18b6d30 (diff) | |
download | netifd-f80b9e4acc47cf454768b44142495fdb8a68a39f.tar.gz |
utils: add a function for checking if a process given by pid is still alive
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Diffstat (limited to 'utils.c')
-rw-r--r-- | utils.c | 27 |
1 files changed, 27 insertions, 0 deletions
@@ -18,6 +18,10 @@ #include <arpa/inet.h> #include <netinet/in.h> +#ifdef __APPLE__ +#include <libproc.h> +#endif + void __vlist_simple_init(struct vlist_simple_tree *tree, int offset) { @@ -168,3 +172,26 @@ crc32_file(FILE *fp) return c ^ 0xFFFFFFFF; } + +bool check_pid_path(int pid, const char *exe) +{ + int proc_exe_len; + int exe_len = strlen(exe); + +#ifdef __APPLE__ + char proc_exe_buf[PROC_PIDPATHINFO_SIZE]; + + proc_exe_len = proc_pidpath(pid, proc_exe_buf, sizeof(proc_exe_buf)); +#else + char proc_exe[32]; + char *proc_exe_buf = alloca(exe_len); + + sprintf(proc_exe, "/proc/%d/exe", pid); + proc_exe_len = readlink(proc_exe, proc_exe_buf, exe_len); +#endif + + if (proc_exe_len != exe_len) + return false; + + return !memcmp(exe, proc_exe_buf, exe_len); +} |