通过其子进程分析进程,然后杀死该子进程

荒凉的冬天

我试图找出一种通过其子进程C中分析进程的方法,片刻后父进程杀死其子进程以停止分析。我正在使用perf来分析我的应用程序。perf被杀死后将在文件中输出结果。在bash脚本中看起来像这样:

./run &
perf stat -o perf.data -p <pid_run> &
kill -9 <pid_perf>

到目前为止,我所做的是:

 #include <stdio.h>
 #include <stdlib.h>
 #include <signal.h>
 #include <sys/types.h>
 #include <unistd.h>
 #include <fcntl.h>

 static pid_t perf_id;

 void start() {
   char *filename="test_data";
   char ppid_str[24];

   pid_t pid = fork();
   if (pid == 0){

      pid_t ppid = getppid();
      sprintf(ppid_str, "%d",ppid);
      char *args[] = {"/usr/bin/perf", "stat","-p",ppid_str,"-o", filename, NULL};
      execvp(args[0], args);
   }
   else {

      perf_id = pid
   }
}

void stop() {
  kill(perf_id,SIGKILL);
}

我在获取perf的输出时遇到问题这是可以运行父进程的代码示例:

int main() {
    start();
    int a = 0;
    a+=1;
    stop();
    // ... // There are other instructions after the stop
    return 0;
 }

运行此代码时,我没有从perf获得任何输出。我必须杀死父进程才能获得输出。

如果我在杀死子进程之前进行了睡眠调用,则程序将输出一个空文件。

编辑:

stat参数是命令中的一个示例,我也想使用record参数
如Zulan所述,如果我使用SIGINT代替SIGKILL,我将得到一个输出,但是只有在主进程睡眠1秒钟时我才能得到一个输出。

Zulan

您应该发送aSIGINT而不是aSIGKILL以便perf完全关闭并生成有效的输出文件。perf子进程与主进程之间的同步仍将是不完美的-因此,如果主进程不需要花费您的示例中的大量时间,则很可能根本不生成任何输出文件。这也会影响所收集数据的准确性。通过使用perf作为子进程而不是反之的设置,您无法真正改善它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

子进程如何杀死其他子进程然后终止?

来自分类Dev

杀死NodeJS子进程

来自分类Dev

如何杀死子进程

来自分类Dev

杀死通过子进程在后台启动的SimpleHTTPServer进程

来自分类Dev

如何同时杀死进程和子进程?

来自分类Dev

杀死子管道进程的父进程

来自分类Dev

Python子进程杀死超时

来自分类Dev

python 杀死python的子进程

来自分类Dev

杀死bash和子进程

来自分类Dev

如何杀死npm子进程

来自分类Dev

重击:启动并杀死子进程

来自分类Dev

僵尸进程(杀死子进程和父进程)

来自分类Dev

为什么杀死该子进程会引发ProcessLookupError?

来自分类Dev

当父进程被杀死时杀死子进程

来自分类Dev

子进程输出满足条件时杀死子进程?

来自分类Dev

当父进程等待子进程终止时,子进程如何杀死父进程?

来自分类Dev

通过信号杀死子进程,但是位置会影响吗?

来自分类Dev

Unix命令Timeout是否还会杀死进程的任何子进程?

来自分类Dev

父进程终止后如何杀死所有子进程?

来自分类Dev

当父进程结束时杀死子进程

来自分类Dev

创建子进程并在调用该进程后将其杀死

来自分类Dev

Bash子进程在执行eval exec时会杀死父进程

来自分类Dev

杀死进程本身和所有子进程的最佳方法

来自分类Dev

python subprocess.Popen使用子进程杀死进程

来自分类Dev

完全创建和杀死进程和子进程

来自分类Dev

超时后杀死多个子进程的子进程?

来自分类Dev

如何杀死由Java中的进程启动的子进程?

来自分类Dev

Malloc在Linux环境中杀死子进程

来自分类Linux

在python中杀死sudo启动的子进程