如何解决?我无法获得pid()

时间:2019-06-14 14:35:40

标签: c linux file unix io

我必须编写一个程序,该程序将使用当前正在运行的进程的PID创建一个新文件。当进程收到SIGUSR1信号时,当前进程的PPID将被附加到文件中。如果收到SIGUSR2,则文件将被截断。收到上述任何一个信号后,程序结束。

当我开始编译程序时,我在PuTTy中一无所获。

这是我的代码:

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

static void sig_usr(int);

int main(int argc, char *argv[]) {
    if (signal(SIGUSR1, sig_usr) == SIG_ERR) {
        printf("cannot catch SIGUSR1\n");
        return 1;
    };

    if (signal(SIGUSR1, sig_usr) == SIG_ERR) {
        printf("cannot catch SIGUSR1\n");
        return 1;
    };

    if (signal(SIGUSR2, sig_usr) == SIG_ERR) {
        printf("cannot catch SIGUSR2\n");
        return 1;
    };

    while(1) {
        pause();
    }

    return 0;
}

static void sig_usr(int signo) {
    FILE *stream;
    pid_t pid = getpid();

    if (signo == SIGUSR1) {
        printf("received SIGUSR1\n");
        stream = fopen("plik.txt", "w");
        fprintf(stream, "%d", pid);
        fclose(stream);
    } else if (signo == SIGUSR2) {
        printf("received SIGUSR2\n");
        stream = fopen("plik.txt", "w");
        char value[1024] = " ";
        fprintf(stream, "%s", value);
        fclose(stream);
    } else {
        printf("received singal %d\n", signo);
    }
}

0 个答案:

没有答案