
Estou executando o PDFXCview.exe (para a versão portátil do visualizador pdfxchange) no wine para abrir um arquivo pdf, por
PDFXCview.exe 1.pdf
Quando faço o mesmo para outro arquivo, o outro arquivo será aberto pelo mesmo processo do PDFXCview.exe. Posso abri-lo em um processo diferente? O motivo é que o aplicativo fica mais lento ou não responde quando há dois arquivos PDF abertos no mesmo processo.
Está executando um processo diferente ou não determinado pelo executável PDFXCview.exe? É porque o arquivo exe é executado como um servidor?
a solução é a mesma para outros aplicativos Linux nativos?
Obrigado.
Responder1
Nativamente,vários processos podem ser executados com o mesmo código executável. Se isso não estiver acontecendo naturalmente, sim, o próprio programa fez com que isso acontecesse. No entanto, eu não poderia dizer como isso é feito em um sistema Windows (ou pelo menos semelhante ao Windows). No Linux, usamos principalmente .pid
arquivos.
É porque o arquivo exe é executado como um servidor?
Bem, este também pode ser o caso. Na verdade, existe uma opção que permite isso no Emacs. No entanto, não vejo muito sentido em um visualizador de PDF... Em um sistema Linux, posso pensar em duas soluções amplamente utilizadas para isso:
- Um soquete UNIX que permite a comunicação de duas instâncias.
- Sinais: quando uma segunda instância é gerada, ela apenas envia um sinal para a primeira (dizendo:Acordar!) e saídas.
A primeira coisa que você pode querer verificar: isso é configurável? No VLC, por exemplo, isso pode ser definido (e isso é incrível):
Por alguma razão (que eu realmente não quero descobrir), não consigo mais rodar o Wine. Porém, em uma máquina virtual, me deparei com isso noEditar > Preferênciascardápio:
Mudando paraDocumento únicoe permitindoVárias instânciasdeveria transformar essa coisinha no visualizador de PDF que você procura!
Em um sistema Linux, você provavelmente poderia tentar brincar com o .pid
arquivo criado pelo aplicativo. Isso pode resultar em resultados desagradáveis, mas se você excluir o arquivo depois que o aplicativo for iniciado, você poderá enganar a nova instância, desde que ela não procure outras instâncias além do .pid
arquivo.
Outra solução seria executar o segundo programa como outro usuário, já que dois usuários não podem compartilhar o mesmo processo, o programa terá que ser iniciado duas vezes. É assim que algumas pessoas iniciam o Skype duas vezes com sucesso no Linux (mesmo que não exija muito esforço).
Você pode querer ter em mente que um aplicativo executado no modo de instância única provavelmente tem um bom motivo para fazer isso. Além disso, na maioria das vezes, esta é mais uma escolha do usuário do que um design realmente necessário.
Prós
Há apenas um processo em execução, o que significa um espaço de endereço de memória para todos e, portanto, fácil comunicação entre o que teria sidodois processos, duas instâncias.
Alguns programas gráficos são executados com muita frequência. Veja o exemplo do VLC: toda vez que abro um arquivo MP3 no meu diretório de músicas, uma nova janela é criada! Ou seja, a cada 3 ou 4 minutos, quando termina uma música, tenho que fechar a janela antiga, e abrir o novo arquivo. Isso não é útil. De forma alguma. No entanto, ter a instância atual do VLC registrando a próxima música em sua fila sem fechar/reabrir, isso é legal.
Outra vantagem: veja o caso de um aplicativo superpesado, como um videogame sofisticado. Este aplicativo leva muito tempo e recursos para ser iniciado, e todos nós sabemos como é fácil iniciar um aplicativo acidentalmente por engano. Ao configurar o aplicativo para ser executado no modo de instância única, reiniciá-lo normalmente apenas trará a primeira instância de volta ao primeiro plano. Muitos desenvolvedores de jogos também usam isso para evitar que os usuários façam login com várias contas ao mesmo tempo.
Contras
Bem, como você pode ver: uma tendência para um design pobre. Na verdade, como isso torna a comunicação muito mais fácil (sem necessidade de comunicação entre processos, IPC), alguns desenvolvedores preguiçosos podem tentar forçar seus aplicativos a um estado de instância única o tempo todo. Para a maioria dos aplicativos, isso não é realmente um problema, mas para um visualizador de PDF, isso é ridículo.
Não é realmente um golpe, mas um cenário ruim: não oferecer isso como uma opção. A menos que sua aplicaçãorealmenteprecisa ser executado no modo de instância única, você deve sempre fazer disso uma escolha do usuário (ou apenas usar várias instâncias quando não for perturbador).
No entanto, no final, a principal preocupação aqui éexperiência de usuário. É por isso que o modo de instância única costuma ser uma opção, porque realmente depende de comovocêuse o programa. Se você apenas assiste a 1 ou 2 arquivos de vídeo por mês, provavelmente não se importa com a execução do VLC em várias instâncias. Se você ouve música 100% do tempo, você se preocupa com isso, porque não quer acabar comnProcessos VLC, comn-1os inativos.
Responder2
Em geral, não. Se um programa nunca chamar execve
, você não terá oportunidade de interceptar nada, a menos que consiga escrever um código para pré-carregar um símbolo, mas não tenho certeza se isso funciona mesmo com o WINE.