#define PROC_BUF_MAX 64
#define PROC_NAME_MAX 1024
+#define PROC_STATUS_CNT 6
+
+#define PROC_STATUS_NAME 0
+#define PROC_STATUS_STATE 1
+#define PROC_STATUS_TGID 2
+#define PROC_STATUS_PID 3
+#define PROC_STATUS_PPID 4
+#define PROC_STATUS_TRACERPID 5
#define COMMA_DELIMETER ","
return proc_get_data(path, buf, len);
}
-int proc_get_status(pid_t pid, char *buf, int len)
+int proc_get_status(pid_t pid, char status[][PROC_BUF_MAX])
{
+ unsigned int i;
char path[PROC_BUF_MAX];
+ char status_buf[PROC_BUF_MAX];
+ FILE *fp;
+
snprintf(path, sizeof(path), "/proc/%d/status", pid);
- return proc_get_data(path, buf, len);
+ fp = fopen(path, "r");
+ if (fp == NULL)
+ return STC_ERROR_FAIL;
+
+ for (i = 0; i < PROC_STATUS_CNT; ++i) {
+ char *token = NULL;
+ char *saveptr = NULL;
+
+ if (fgets(status_buf, sizeof(status_buf), fp) == NULL) {
+ fclose(fp);
+ return STC_ERROR_FAIL;
+ }
+
+ token = strtok_r(status_buf, ":", &saveptr);
+ if (token != NULL) {
+ token = strtok_r(NULL, "\n", &saveptr);
+ if (token != NULL) {
+ while (isspace((unsigned char)*token))
+ token++;
+ strncpy(status[i], token, sizeof(status[i]));
+ }
+ }
+ }
+ fclose(fp);
+
+ return STC_ERROR_NONE;
}
typedef struct {
char cmdline[PROC_NAME_MAX];
- char status[PROC_BUF_MAX];
+ char status[PROC_STATUS_CNT][PROC_BUF_MAX];
} proc_value_s;
typedef struct __attribute__ ((aligned(NLMSG_ALIGNTO))) {
static void __process_event_exec(int tid, int pid)
{
char cmdline[PROC_NAME_MAX] = {0, };
- char status[PROC_BUF_MAX] = {0, };
+ char status[PROC_STATUS_CNT][PROC_BUF_MAX];
if (STC_ERROR_NONE == proc_get_cmdline(pid, cmdline) &&
- STC_ERROR_NONE == proc_get_status(pid, status, PROC_BUF_MAX)) {
+ STC_ERROR_NONE == proc_get_status(pid, status)) {
if (__check_excn(cmdline)) {
STC_LOGI("[%s] monitoring is excepted", cmdline);
return;
}
+ unsigned int i;
proc_key_s *key;
proc_value_s *value;
}
key->pid = pid;
- g_strlcpy(value->status, status, sizeof(value->status));
+ for (i = 0; i < PROC_STATUS_CNT; ++i)
+ g_strlcpy(value->status[i], status[i], sizeof(value->status[i]));
g_strlcpy(value->cmdline, cmdline, sizeof(value->cmdline));
__proc_tree_add(key, value);
- STC_LOGD("EXEC:pid=%d,tgid=%d\t[%s]\t[%s]", pid, tid, status,
- cmdline);
+ STC_LOGD("EXEC: pid[%d] tgid=[%d] cmdline[%s]", pid, tid, cmdline);
+ STC_LOGD("STATUS: name[%s] state[%s] tgid[%s] pid[%s] ppid[%s] tracerpid[%s]",
+ status[PROC_STATUS_NAME], status[PROC_STATUS_STATE], status[PROC_STATUS_TGID],
+ status[PROC_STATUS_PID], status[PROC_STATUS_PPID], status[PROC_STATUS_TRACERPID]);
}
}