dkonigsberg icon

Find process PID on QNX

dkonigsberg | PRO | 05/13/15 09:03:31 PM UTC | 0 ⭐ | 668 👁️ | Never ⏰ | []
C |

1.21 KB

|

None

|

0 👍

/

0 👎

pid_t findProcessPid(const char *process) {
    DIR *dirp;
    struct dirent *dire;
    char buffer[32];
    int fd=0, status;
    pid_t pid;
    struct dinfo_s {
        procfs_debuginfo info;
        char pathbuffer[PATH_MAX];
    } dinfo;
 
    if ((dirp = opendir("/proc")) == NULL) {
        closedir(dirp);
        qWarning() << "Could not open '/proc'";
        return -1;
    }
 
    while (true) {
        if ((dire = readdir(dirp)) == NULL) break;
        if (isdigit(dire->d_name[0])) {
            pid = strtoul(dire->d_name, NULL, 0);
            sprintf(buffer, "/proc/%d/as", pid);
            if (fd > 0) close(fd);
            fd = open(buffer, O_RDONLY);
            if (fd > 0) {
                status = devctl(fd, DCMD_PROC_MAPDEBUG_BASE, &dinfo, sizeof(dinfo), NULL);
                if (status == EOK) {
                    if (!strcmp(process, basename(dinfo.info.path))) {
                        if (fd > 0) close( fd );
                        closedir(dirp);
                        return pid;
                    }
                }
                if (fd > 0) close(fd);
            }
        }
    }
    if (fd > 0) close(fd);
    closedir(dirp);
    return 0;
}

Comments