Je suis en train de tester certaines fonctionnalités pour surveiller les processus et j'ai besoin d'émuler un vidage de mémoire avec un "délai" déterminé (par exemple, je dois faire un processus de "vidage du noyau" pendant 30 secondes). J'ai remarqué que le processus de vidage d'un noyau est en sommeil ininterrompu, donc il ne peut pas être tué avec SIGKILL, mais lorsque j'essaie d'émuler ce comportement en utilisant des commandes de tuyau qui reçoivent coredump, je peux facilement tuer un tel processus. Donc, y a-t-il un moyen de faire du processus pour entrer en sommeil sans interruption (avec un tel statut dans ps) et de le faire ignorer le SIGKILL?Comment mettre un processus en "sommeil ininterrompu"?
Répondre
Pour mettre un processus en mode de veille interruptible, vous devrez entrer le code du noyau. En utilisant la fonctionnalité wake_up_interruptible
et les verrous d'essorage, vous serez en mesure d'atteindre cet état.
Il n'y a aucun moyen de bloquer SIGKILL. C'est le but. L'approche du gros marteau pour se débarrasser d'un processus. La seule façon dont SIGKILL peut bloquer est si le processus est verrouillé dans le noyau.
Une manière fiable (si compliquée) de le faire est de monter un répertoire NFS de manière matérielle, puis d'arrêter le serveur NFS.
Le moyen le plus approprié est d'utiliser un groupe de congélation. Il met le processus à un sommeil ininterrompu en cas d'état de groupe de congélation.
# mkdir /sys/fs/cgroup/freezer
# mount -t cgroup -ofreezer freezer /sys/fs/cgroup/freezer
# mkdir /sys/fs/cgroup/freezer/frozen
# echo FROZEN > /sys/fs/cgroup/freezer/frozen/freezer.state
# echo `pidof you_process` > /sys/fs/cgroup/freezer/frozen/tasks
Pour mettre de nouveau en sommeil interruptible, il suffit de changer l'état de groupe en THAWED.
Cela a fonctionné pour moi, merci. Pour une raison quelconque, la sortie de 'ps aux' ne reflète l'état' D' qu'après avoir envoyé SIGTERM au processus. –
- 1. Comment arrêter un PDA en sommeil
- 2. php-fpm processus tombe dans le sommeil sans coupure
- 3. Jeu mp3 ininterrompu sur un site web?
- 4. Mettre un processus de * sommeil interruptible au premier plan dans la console actuelle
- 5. JSON Spawning processus de sommeil mysql
- 6. Beaucoup de processus de sommeil mysql
- 7. killall httpd pour le processus de sommeil
- 8. Comment faire pour supprimer le processus de sommeil dans Mysql
- 9. Mettre en pause un processus dans Windows
- 10. casser « sommeil » en perl brusquement
- 11. Mettre en place un processus stocké SQL
- 12. Comment android décide de mettre en cache un processus
- 13. Comment mettre fin à un processus en cours dans matlab?
- 14. Comment mettre fin à un processus en C++?
- 15. Comment mettre fin à un processus en utilisant Visual Basic?
- 16. Sommeil interruptible en Qt?
- 17. script php pour tuer des processus « sommeil » shell
- 18. Comment mettre fin au processus?
- 19. fourchette compréhension(), le sommeil() et les processus de flux
- 20. comment réveiller un fil de sommeil en android
- 21. comment mettre en pause pendant un processus allant dans loopss (delphi)
- 22. Android, comment faire un fil de sommeil?
- 23. Processus d'affichage Mysql - Commandes de sommeil et quoi faire
- 24. Utiliser cron ou une boucle Java avec un processus de sommeil
- 25. temps de sommeil en boucle
- 26. SHOW PROCESSLIST en commande MySQL: le sommeil
- 27. Retard de sommeil PHP
- 28. Obtenir un processus de mettre fin à
- 29. Mettre fin en python sous-processus
- 30. En ce qui concerne l'état du processus en sortie de la commande/proc/stat
Mais pendant le processus de dumping, le processus de noyau est immunisé contre SIGKILL. –
D'où ... bloqué dans le noyau. –
Si vous les avez bloqués avec STAT == D, au moins sur nos systèmes (centos6.4) vous ne pouvez pas les tuer, vous devez résoudre le problème sous-jacent. – nhed