(Juga untuk menjawab pertanyaan duplikat / tertutup. Bagaimana saya bisa menjeda atau membekukan proses yang sedang berjalan ? , menanyakan apa yang harus dilakukan ketika aplikasi mogok setelah melanjutkan.)
Ada proses yang tidak dilanjutkan dengan benar setelah kill -STOP $PID
& kill -CONT $PID
. Jika demikian, Anda dapat mencoba pos pemeriksaan / pengembalian dengan CRIU . Jika Anda tidak keberatan dengan overhead Anda juga dapat menjalankan proses di mesin virtual, yang dapat Anda tangguhkan.
Salah satu alasan mengapa suatu proses tidak dilanjutkan setelah SIGSTOP / SIGCONT bisa jadi beberapa sistem pemblokiran panggilan di Linux gagal dengan EINTR ketika proses dihentikan dan kemudian dilanjutkan melalui SIGCONT. Dari sinyal (7) :
Gangguan panggilan sistem dan fungsi pustaka oleh sinyal berhenti
Di Linux, bahkan jika tidak ada penangan sinyal, antarmuka pemblokiran tertentu dapat gagal dengan kesalahan EINTR setelah proses dihentikan oleh salah satu sinyal berhenti dan kemudian dilanjutkan melalui SIGCONT. Perilaku ini tidak disetujui oleh POSIX.1, dan tidak terjadi pada sistem lain.
[...]
Salah satu panggilan sistem yang terpengaruh adalah epoll_wait (2) . Contoh:
#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;
}
Kompilasi dan jalankan:
$ gcc -o example example.c
$ echo 'input' | ./example
Received input
$ ./example
Ctrl+Z
[1]+ Stopped ./example
$ fg
./example
epoll_wait: Interrupted system call
EINTR
saatSIGCONT
dikirim ke proses yang dihentikan. Program tetap berhenti sampaiSIGCONT
dikirimAnda dapat menggunakan pkill untuk mengirim
STOP
danCONT
memberi sinyal ke nama proses, sehingga Anda tidak perlu mencari tahu PID.Untuk menangguhkan proses dengan nama:
Untuk membangunkan kembali proses itu:
sumber