Cでの子プロセスのメモリ使用量

Ali S. Veliyev

Cでのメモリ使用量の計算に関する記事を読みましたが、問題があります。

私は簡単なテストプログラムを作成します。これは1秒以上動作し、1KB以上のメモリを使用する可能性があります。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int a;
int f[1000000];
sleep(1);
 scanf("%d",&a);
 printf("%d %d\n",a/10,a%10);

return 0;
}

それから私はこれをいくつかにコンパイルmain.exeし、記事からプログラム操作をチェックします

pid = fork();
if (pid == 0) 
{
    struct rlimit rlim;
    rlim.rlim_cur = rlim.rlim_max = TIME_LIMIT;
    setrlimit(RLIMIT_CPU, &rlim);
    execv("./main.exe",NULL);
}
else 
{
        struct rusage resource_usage;
        // set arbitrary lower limit value of memory used
        int memory_used = 128;
        pid_t pid2;

        do {
            memory_used = max(memory_used, get_memory_usage(pid));
            if ((memory_used > memory_limit)
                kill(pid, SIGKILL);

           // wait for the child process to change state
            pid2 = wait4(pid, &status, WUNTRACED | WCONTINUED, &resource_usage);
        } while (pid2 == 0);
}

そしてget_memory_usage()記事からの機能

int get_memory_usage(pid_t pid) {
    int fd, data, stack;
    char buf[4096], status_child[NAME_MAX];
    char *vm;

    sprintf(status_child, "/proc/%d/status", pid);
    if ((fd = open(status_child, O_RDONLY)) < 0)
        return -1;

    read(fd, buf, 4095);
    buf[4095] = '\0';
    close(fd);

    data = stack = 0;

    vm = strstr(buf, "VmData:");
    if (vm) {
        sscanf(vm, "%*s %d", &data);
    }
    vm = strstr(buf, "VmStk:");
    if (vm) {
        sscanf(vm, "%*s %d", &stack);
    }

    return data + stack;    
}

しかし、文字列の問題、ここでpid2 = wait4(pid, &status, WUNTRACED | WCONTINUED, &resource_usage);while反復を1回だけ行い、プロセスが終了するのを待ちます。しかし、私はメモリを計算する必要があり、rusage resource_usageこの情報を教えてくれません。while子プロセスが実行されているときに動作し、停止したところで停止するよりも、どうすれば作成できますか彼がゾンビをしているとき、子プロセスのステータスにはもっと問題があります。それは記憶を与えません。私もそれを捕まえる必要があります。私の場合、main.exeこのテストプログラムを使用するため

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int a;
   int f[1000000];
   sleep(1);
   scanf("%d",&a);
   printf("%d %d\n",a/10,a%10);
   return 0;
}

get_memory_usageinfiniteから出力を行うとwhile、すべての/proc/[pid]/status出力が表示されます。なるほど、その子プロセスは

Name:   check.exe
State:  R (running)

その後、それは

Name:   main.exe
State:  Z (zombie)

これは、procmain.exeが実行されている場所で情報を取得できないことを意味します。

JeremyP

waitpid()のマニュアルページによると、wait4()プロセスへの呼び出しは、プロセスが停止するまでブロックするか、停止した後に再開します。これは、入力の待機をブロックすることと同じではなく、信号(SIGSTOPによって停止されたことを意味します

必要なのは、ブロックWNOHANGを停止しwait4()、おそらく次のようにすぐに戻るようにすることです。

do 
{
   // All the stuff you want to do
   pid2 = wait4(pid, &status, WNOHANG, &resource_usage);
} while (pid2 == 0);

注意:私は上記をまったくテストしておらず、コンパイルもしていません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Cでの現在のプロセスのメモリ使用量

分類Dev

Linuxでのプロセスメモリ使用量

分類Dev

C#で別のプロセスのメモリ使用量を取得する

分類Dev

子プロセスのCPUとメモリ使用量を見つける方法

分類Dev

プロセスの実際のメモリ使用量

分類Dev

Linuxでのプロセスのメモリ使用量の測定

分類Dev

MacOSでのプロセスごとのメモリ使用量の計算

分類Dev

PHPプロセスのメモリ使用量

分類Dev

Linux / Unixプロセスのピークメモリ使用量

分類Dev

プロセスごとのメモリ使用量

分類Dev

Mysqlのメモリ使用量とプロセス

分類Dev

C#Winformsアプリでの合計プロセスメモリ使用量の矛盾したレポート

分類Dev

ネイティブプロセスでのJavaメモリ使用量

分類Dev

プロセスのメモリ使用量を%で取得します

分類Dev

Linuxの単一プロセスのCPU使用量とメモリ使用量を取得しますか?

分類Dev

C#でのEventLog列挙子のメモリ使用量

分類Dev

プロセスなしでメモリ使用量が増加

分類Dev

Javaプロセスの常駐メモリ使用量(RSS)の増加

分類Dev

単一のLinuxプロセスのメモリ使用量を制限する

分類Dev

非常に短いプロセスの最大メモリ使用量の決定

分類Dev

JVMプロセスとJVMヒープのメモリ使用量

分類Dev

Pythonプロセス内のメモリ使用量を制限する方法

分類Dev

PHPプロセスのメモリ使用量を最適化する方法は?

分類Dev

OS X / macOSプロセスのメモリ使用量を取得する方法

分類Dev

メモリ使用量によるプロセスの並べ替え

分類Dev

Ubuntuプロセスの高いメモリ使用量(ほぼ99%)

分類Dev

Pythonでのpsutilを使用した単一プロセスのメモリ使用量(バイト単位)

分類Dev

Mac OSX 10.6.7での「java」プロセスのスレッドとメモリ使用量が多い

分類Dev

Javaでのスレッドまたはプロセスのメモリ使用量

Related 関連記事

  1. 1

    Cでの現在のプロセスのメモリ使用量

  2. 2

    Linuxでのプロセスメモリ使用量

  3. 3

    C#で別のプロセスのメモリ使用量を取得する

  4. 4

    子プロセスのCPUとメモリ使用量を見つける方法

  5. 5

    プロセスの実際のメモリ使用量

  6. 6

    Linuxでのプロセスのメモリ使用量の測定

  7. 7

    MacOSでのプロセスごとのメモリ使用量の計算

  8. 8

    PHPプロセスのメモリ使用量

  9. 9

    Linux / Unixプロセスのピークメモリ使用量

  10. 10

    プロセスごとのメモリ使用量

  11. 11

    Mysqlのメモリ使用量とプロセス

  12. 12

    C#Winformsアプリでの合計プロセスメモリ使用量の矛盾したレポート

  13. 13

    ネイティブプロセスでのJavaメモリ使用量

  14. 14

    プロセスのメモリ使用量を%で取得します

  15. 15

    Linuxの単一プロセスのCPU使用量とメモリ使用量を取得しますか?

  16. 16

    C#でのEventLog列挙子のメモリ使用量

  17. 17

    プロセスなしでメモリ使用量が増加

  18. 18

    Javaプロセスの常駐メモリ使用量(RSS)の増加

  19. 19

    単一のLinuxプロセスのメモリ使用量を制限する

  20. 20

    非常に短いプロセスの最大メモリ使用量の決定

  21. 21

    JVMプロセスとJVMヒープのメモリ使用量

  22. 22

    Pythonプロセス内のメモリ使用量を制限する方法

  23. 23

    PHPプロセスのメモリ使用量を最適化する方法は?

  24. 24

    OS X / macOSプロセスのメモリ使用量を取得する方法

  25. 25

    メモリ使用量によるプロセスの並べ替え

  26. 26

    Ubuntuプロセスの高いメモリ使用量(ほぼ99%)

  27. 27

    Pythonでのpsutilを使用した単一プロセスのメモリ使用量(バイト単位)

  28. 28

    Mac OSX 10.6.7での「java」プロセスのスレッドとメモリ使用量が多い

  29. 29

    Javaでのスレッドまたはプロセスのメモリ使用量

ホットタグ

アーカイブ