
Estoy ejecutando PDFXCview.exe (para la versión portátil del visor pdfxchange) en Wine para abrir un archivo pdf, por
PDFXCview.exe 1.pdf
Cuando hago lo mismo con otro archivo, el otro archivo se abrirá mediante el mismo proceso de PDFXCview.exe. ¿Puedo abrirlo en un proceso diferente? La razón es que la aplicación se vuelve más lenta y no responde cuando hay dos archivos pdf abiertos en el mismo proceso.
¿Se está ejecutando un proceso diferente o no lo determina el ejecutable PDFXCview.exe? ¿Es porque el archivo exe se ejecuta como servidor?
¿La solución es la misma para otras aplicaciones nativas de Linux?
Gracias.
Respuesta1
De forma nativa,Se pueden ejecutar varios procesos con el mismo código ejecutable.. Si esto no sucede de forma natural, entonces sí, el propio programa lo hizo posible. Sin embargo, no podría decirle cómo se hace esto en un sistema Windows (o al menos, bastante parecido a Windows). En Linux, utilizamos principalmente .pid
archivos.
¿Es porque el archivo exe se ejecuta como servidor?
Bueno, este también podría ser el caso. De hecho, existe una opción que permite esto en Emacs. Sin embargo, no veo el sentido para un visor de PDF... En un sistema Linux, puedo pensar en dos soluciones ampliamente utilizadas para esto:
- Un socket UNIX que permite que dos instancias se comuniquen.
- Señales: cuando se genera una segunda instancia, simplemente envía una señal a la primera (que dice:¡Despertar!) y sale.
Lo primero que quizás quieras comprobar: ¿es esto configurable? En VLC, por ejemplo, esto se puede configurar (y eso es bastante sorprendente):
Por alguna razón (que realmente no quiero descubrir), ya no puedo ejecutar Wine. Sin embargo, en una máquina virtual, me encontré con estos en elEditar > Preferenciasmenú:
Cambiar aDocumento únicoy permitiendoMúltiples instancias¡Debería convertir esta pequeña cosa en el visor de PDF que estás buscando!
En un sistema Linux, probablemente podrías intentar jugar con el .pid
archivo creado por la aplicación. Esto podría generar resultados desagradables, pero si elimina el archivo después de que se haya iniciado la aplicación, debería poder engañar a la nueva instancia, siempre que no busque otras instancias más allá del .pid
archivo.
Otra solución sería ejecutar el segundo programa como otro usuario, ya que dos usuarios no pueden compartir un mismo proceso, el programa tendrá que iniciarse dos veces. Así es como algunas personas inician Skype dos veces con éxito en Linux (aunque no requiere mucho esfuerzo).
Es posible que desee tener en cuenta que una aplicación que se ejecuta en modo de instancia única probablemente tenga una buena razón para hacerlo. Además, la mayoría de las veces, se trata de una elección del usuario más que de un diseño realmente necesario.
Ventajas
Sólo hay un proceso en ejecución, lo que significa un espacio de direcciones de memoria para todos y, por lo tanto, una fácil comunicación entre lo que habría sidodos procesos, dos instancias.
Algunos programas gráficos se ejecutan con mucha frecuencia. Tomemos el ejemplo de VLC: cada vez que abro un archivo MP3 en mi directorio de Música, ¡se crea una nueva ventana! Es decir, cada 3 o 4 minutos, cuando termina una música, tengo que cerrar la ventana antigua, y abrir el archivo nuevo. Eso no es útil. En absoluto. Sin embargo, hacer que la instancia VLC actual registre la siguiente canción en su cola sin cerrarla ni reabrirla, es genial.
Otra ventaja: tomemos el caso de una aplicación muy pesada, como un videojuego sofisticado. Esta aplicación requiere mucho tiempo y recursos para iniciarse, y todos sabemos lo fácil que es iniciar una aplicación por error. Al configurar la aplicación para que se ejecute en modo de instancia única, al reiniciarla normalmente la primera instancia volverá al primer plano. Muchos desarrolladores de juegos también utilizan esto para evitar que los usuarios inicien sesión con varias cuentas al mismo tiempo.
Contras
Bueno, como puedes ver: una tendencia al mal diseño. De hecho, dado que facilita mucho la comunicación (no es necesaria la comunicación entre procesos, IPC), algunos desarrolladores perezosos podrían intentar forzar sus aplicaciones a un estado de instancia única todo el tiempo. Para la mayoría de las aplicaciones, esto no es realmente un problema, pero para un visor de PDF, eso es ridículo.
Realmente no es una desventaja, pero sí un mal escenario: no ofrecer esto como una opción. A menos que su solicituden realidadnecesita ejecutarse en modo de instancia única, siempre debe hacer que esto sea una elección del usuario (o simplemente usar instancias múltiples cuando no sea molesto).
Sin embargo, al final, la principal preocupación aquí esexperiencia de usuario. Esta es la razón por la que el modo de instancia única suele ser una opción, porque realmente depende de cómotúutilizar el programa. Si simplemente miras 1 o 2 archivos de vídeo al mes, probablemente no te importe que VLC se ejecute en varias instancias. Si escuchas música el 100% del tiempo, esto sí te importa, porque no quieres terminar connorteProcesos VLC, conn-1los inactivos.
Respuesta2
En general, no. Si un programa nunca llama execve
, no tienes oportunidad de interceptar nada, a menos que logres escribir código para precargarlo sobre un símbolo, pero no estoy seguro de que eso funcione ni siquiera con WINE.