プロセスを強制終了せずに一時停止します


11

そのため、私は永続的なプログラムをバックグラウンドで実行しています。強制終了すると、別のPIDで再起動するだけです。一時停止したい(実際に殺さずにスリープ状態にする)。kill -9はこれを行いますか?そうでない場合、これはどのように行う必要がありますか?

回答:


14
kill -STOP $PID
[...]
kill -CONT $PID

@jordanm追加:SIGKILL(kill -9)と同様に、SIGSTOP も無視できないことに注意してください。


4

(また、重複した/クローズドの質問に答えるために、実行中のプロセスを一時停止またはフリーズするにはどうすればよいですか?再開後にアプリケーションがクラッシュしたときに何をすべきかを尋ねます。)

kill -STOP $PID&の後に正しく再開しないプロセスがありますkill -CONT $PID。その場合は、CRIUでチェックポイント/復元を試すことができます。オーバーヘッドを気にしない場合は、仮想マシンでプロセスを実行することもできます。これは一時停止できます。

SIGSTOP / SIGCONTの後でプロセスが再開しない理由の1つは、Linuxの一部のブロックシステムコールが、プロセスが停止してSIGCONTを介して再開したときにEINTRで失敗することです。以下からの信号(7)

停止信号によるシステムコールとライブラリ関数の中断

Linuxでは、シグナルハンドラーがない場合でも、プロセスがいずれかの停止シグナルによって停止され、SIGCONTを介して再開された後、特定のブロッキングインターフェイスがエラーEINTRで失敗する可能性があります。この動作はPOSIX.1では認可されておらず、他のシステムでは発生しません。

[...]

影響を受けるシステムコールの1つはepoll_wait(2)です。例:

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <sys/epoll.h>

int
main(int argc, char *argv[])
{
    int fd = 0;

    int efd = epoll_create(1);
    if (efd == -1) {
        perror("epoll_create");
        exit(1);
    }

    struct epoll_event ev;
    memset(&ev, 0, sizeof(ev));
    ev.events = EPOLLIN;
    ev.data.fd = fd;

    if (epoll_ctl(efd, EPOLL_CTL_ADD, fd, &ev) == -1) {
        perror("epoll_ctl");
        exit(1);
    }

    int res = epoll_wait(efd, &ev, 1, -1);
    if (res == -1) {
        perror("epoll_wait");
        exit(1);
    }

    if (ev.events & EPOLLIN && ev.data.fd == fd) {
        printf("Received input\n");
    }

    return 0;
}

コンパイルして実行:

$ gcc -o example example.c
$ echo 'input' | ./example
Received input
$ ./example
Ctrl+Z
[1]+  Stopped                 ./example
$ fg
./example
epoll_wait: Interrupted system call

面白い。例を挙げていただけますか?
roaima 2016年

>そしてSIGCONTを介して再開しました< 停止したプロセスEINTRSIGCONT送信されるとシステムコールが取得されることを示しています プログラムSIGCONTは送信されるまで停止したままです
myaut

0

pkillを使用してSTOPCONTシグナルをプロセス名に送信できるため、PIDを見つける必要はありません。

名前でプロセスを一時停止するには:

 pkill --signal STOP ProcessNameToSuspend

そのプロセスを再開するために:

 pkill --signal CONT ProcessNameToSuspend
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.