1

シェルによって開始され、シェルによって終了するアプリケーションがあります。今、私のアプリケーションでは、アプリケーションの負荷を減らすためにフォークを作成したので、現在、2つのプロセスが異なるPIDで同じ名前で実行されています。プログラムを終了したいのですが、シェルでプロセスのPIDを使用して強制終了すると、親プロセスのみが強制終了され、ゾンビプロセスとして残り、子プロセスが残ります。では、シェルを介して子プロセスと親プロセスの両方を強制終了する方法は?

4

4 に答える 4

2

コマンドを参照してくださいkillall

于 2012-04-10T12:45:01.993 に答える
2

あなたps -elは次のものを手に入れますか

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD 

getpidppidプロセスのはpkill -P <parent_pid_name>、子を生成した親プロセスIDを意味し、その後に続きkill <signal number> <pid>ます。この場合も、代わりに、pidすべての子を生成した親プロセスIDを指定する必要があります。

于 2012-04-10T12:56:00.847 に答える
1

父親のプロセスは、SIGTERMをトラップし、終了する前にその子を強制終了する必要があります。

私はこれをCで書いた

int child;

void sighandler(int sig) {
        if (sig == SIGTERM) {
                if (child != -1) kill(child, SIGTERM);
        }
}

int main() {
        int i;

        child = -1;
        signal(SIGCHLD, SIG_IGN);
        signal(SIGTERM, sighandler);

        setsid();
        setpgid(0,0);

        i = fork();
        switch(i) {
        case -1:
                break;
        case 0: // child
                sleep (100);
                break;
        default:
                child = i;
                sleep (100);
                break;
        }

        return 0;
}

「killall」コマンドを使用すると、同じ名前のすべてのプロセスを強制終了できます。

于 2012-04-10T13:16:12.363 に答える
0

プロセスを強制終了するために使用できるpkillコマンド。またkillall

于 2012-04-10T17:52:41.670 に答える