"-m", "1024",
                "-c", "1",
        };
-
+       pid_t pid = getpid();
+       char *filter = asprintf__tp_filter_pids(1, &pid);
        const char * const sc_args[] = { "-e", };
        unsigned int sc_args_nr = ARRAY_SIZE(sc_args);
        const char * const majpf_args[] = { "-e", "major-faults" };
        unsigned int majpf_args_nr = ARRAY_SIZE(majpf_args);
        const char * const minpf_args[] = { "-e", "minor-faults" };
        unsigned int minpf_args_nr = ARRAY_SIZE(minpf_args);
+       int err = -1;
 
-       /* +1 is for the event string below */
-       rec_argc = ARRAY_SIZE(record_args) + sc_args_nr + 1 +
+       /* +3 is for the event string below and the pid filter */
+       rec_argc = ARRAY_SIZE(record_args) + sc_args_nr + 3 +
                majpf_args_nr + minpf_args_nr + argc;
        rec_argv = calloc(rec_argc + 1, sizeof(char *));
 
-       if (rec_argv == NULL)
-               return -ENOMEM;
+       if (rec_argv == NULL || filter == NULL)
+               goto out_free;
 
        j = 0;
        for (i = 0; i < ARRAY_SIZE(record_args); i++)
                        rec_argv[j++] = "syscalls:sys_enter,syscalls:sys_exit";
                else {
                        pr_err("Neither raw_syscalls nor syscalls events exist.\n");
-                       free(rec_argv);
-                       return -1;
+                       goto out_free;
                }
        }
 
+       rec_argv[j++] = "--filter";
+       rec_argv[j++] = filter;
+
        if (trace->trace_pgfaults & TRACE_PFMAJ)
                for (i = 0; i < majpf_args_nr; i++)
                        rec_argv[j++] = majpf_args[i];
        for (i = 0; i < (unsigned int)argc; i++)
                rec_argv[j++] = argv[i];
 
-       return cmd_record(j, rec_argv);
+       err = cmd_record(j, rec_argv);
+out_free:
+       free(filter);
+       free(rec_argv);
+       return err;
 }
 
 static size_t trace__fprintf_thread_summary(struct trace *trace, FILE *fp);