En /proc/pid/fd/
, hay demasiados descriptores de archivo. ¿Puedo usar el comando de shell para cerrar estos descriptores de archivo?Cómo cerrar el descriptor de archivo mediante el comando de shell de Linux
Respuesta
Puede cerrar un FD n
del proceso actual en bash como tan:
exec n<&-
Gracias. Pero se usa para cerrar FD del proceso actual (proceso bash). ¿Conoces algún método para cerrar FD de un proceso específico? – Eric
No se puede ir por ahí cierre de descriptores de archivos de otros procesos y esperar que seguir trabajando.
Corrija el programa que tiene demasiados archivos abiertos para abrirlo menos. Esto puede ser un cambio de configuración o modificación de la fuente, etc. No puede cerrar los archivos para ello.
Claro que puedes. Un caso común para querer hacer esto es porque el programa pierde fd; en cuyo caso nunca más los usará. Claro, es un error, pero sigue siendo válido querer evitarlo. –
En mi caso, tuve un proceso prolongado de lotes colgados porque una lectura de un socket http había muerto. Al cerrar el archivo fd como @ThomasVanderStichele describí el problema que me solucionó :-) –
Definitivamente puede cerrar archivos fd de otros procesos en ejecución, siempre que tenga los permisos para hacerlo.
Primero, encuentre el PID.
A continuación, inicie el BGF y asociar al proceso:
gdb -p 1598
Luego, llame a la estrecha llamada al sistema en el fd desea cerrar:
(gdb) call close(999)
$1 = 0
Si el descriptor de archivo fue una filtró uno, entonces el programa nunca intentará usarlo de nuevo de todos modos, y no debería causar ningún problema. Sin embargo, el programa probablemente tiene un error.
He corrido en una situación similar, pero donde gdb
no era una opción ya que interrumpía las restricciones en tiempo real de mi aplicación y distorsionaba mi prueba.
Así que se me ocurrió una regla rápida iptables
. Argumentos opcionales puestos entre corchetes ([ opt ]
).
encontrar su dirección y puerto de destino:
netstat --program [ --numeric-host --numeric-ports ] | grep [<pid>]/[<appname>]
$ netstat --program --numeric-ports | grep 8812/ tcp 0 0 ysc.xxx:54055 10.56.1.152:30000 ESTABLISHED 8812/my-application tcp 0 0 ysc.xxx:46786 postgres.xxx:5432 ESTABLISHED 8812/my-application tcp 0 0 ysc.xxx:36090 10.56.4.79:57000 ESTABLISHED 8812/my-application ... unix 2 [ ] DGRAM 7177020 8812/my-application
Aquí, me gustaría cortar
10.56.4.79:57000
.crear una regla de
iptables
para cortar la toma:iptables -A OUTPUT [ --out-interface <if> --protocol <tcp|udp|unix> ] --destination <addr> --dport <port> --jump DROP
$ iptables -A OUTPUT --destination 10.56.4.79 --dport 57000 --jump DROP $
En esta etapa, su programa no puede enviar paquetes al host remoto. En la mayoría de los casos, la conexión TCP está cerrada. Puede continuar con sus pruebas si hay algunas.
$ netstat --program --numeric-ports | grep 8812/ tcp 0 0 ysc.xxx:54055 10.56.1.152:30000 ESTABLISHED 8812/my-application tcp 0 0 ysc.xxx:46786 postgres.xxx:5432 ESTABLISHED 8812/my-application ... unix 2 [ ] DGRAM 7177020 8812/my-application
quitar la regla
iptables
:Basta con escribir en la misma
iptables
regla de sustitución de laA
por unD
.$ iptables -D OUTPUT --destination 10.56.4.79 --dport 57000 --jump DROP $
Tenga en cuenta que mi intención era probar cómo reaccionaría mi aplicación si perdiera su conexión con un servicio crítico. – YSC
- 1. python cerrar el descriptor del archivo pregunta
- 2. cambio de permiso para archivos y carpetas recursivamente mediante el comando de shell en mac
- 3. tamaño del archivo de shell de linux
- 4. comando de linux para extraer el archivo de guerra
- 5. ¿Cerrar automáticamente el modo de shell de emacs?
- 6. Cómo cerrar un descriptor de archivo de otro proceso en sistemas Unix
- 7. Obteniendo el código de estado de salida del comando 'ftp' en el shell de linux
- 8. descriptor de socket vs descriptor de archivo
- 9. Hbase poner el comando de shell
- 10. ejecute el comando de shell desde java
- 11. ¿Qué tiene de especial el descriptor de archivo 3 en Linux?
- 12. ¿Hay una fuga de descriptor de archivo cuando se usan sockets en una plataforma Linux?
- 13. Cómo ejecutar el comando shell en Javascript
- 14. ¿Cómo cerrar el diálogo de mensaje mediante programación?
- 15. Shell - ¿Cómo encontrar el directorio de algún comando?
- 16. Ejecutar un comando de shell cuando se agrega un archivo
- 17. ¿Cómo mantener el formato de un archivo si usa el comando uniq (en shell)?
- 18. ¿Cómo paralelizar (trivialmente) con el shell de Linux iniciando una tarea por núcleo de Linux?
- 19. El uso de un descriptor de archivo numerado desde Java
- 20. ¿Cómo ejecutar un programa desde el descriptor de archivo?
- 21. ejecutando el comando de shell en el fondo del script
- 22. ¿Cómo ejecutar un comando de shell en el archivo de especificaciones de RPM?
- 23. ssh con el comando .... Más el shell
- 24. descriptor de archivo de un std :: fstream
- 25. Obteniendo el descriptor de archivo más alto asignado
- 26. Usando el comando 'archivo' de linux para determinar el tipo (es decir, imagen, audio o video)
- 27. ejecutar scripts csh desde bash, cambiar el shell temporal mediante el comando
- 28. Observador del sistema de archivos multiplataforma (Linux/OS X) (ejecuta el comando cuando el archivo cambia)
- 29. Comando de archivo Linux: ¿qué implica SYSV?
- 30. comando de Linux "archivo" muestra "para GNU/Linux 2.6.24"
Qué proceso es? ¿Es tu programa? ¿Puedes publicar alguna fuente? – MarkR