Alternativas de Launchd

1

Estou escrevendo um aplicativo que usa uma biblioteca que não funcionará quando o aplicativo for executado como um daemon launchd. Há um bug na biblioteca onde ele lançará um erro de bus quando usado em um daemon. (Veja minha postagem de estouro de pilha: link )

Tudo funciona bem, no entanto, quando executo o aplicativo normalmente. Eu estou querendo saber se existem alternativas para o lançamento que eu deveria considerar. O aplicativo precisa iniciar na inicialização e ser executado mesmo quando nenhum usuário estiver conectado. Também seria preferível que o aplicativo seja reiniciado se houver falha, mas posso viver sem isso, se for necessário.

Eu fiz algumas pesquisas sobre itens de inicialização, mas como eles estão obsoletos, desconfio que a Apple acabe de remover a funcionalidade algum dia.

    
por Eric Milas 19.12.2013 / 19:15

1 resposta

2

Não. Você provavelmente vai acertar exatamente o mesmo problema com qualquer alternativa que você está recebendo aqui.

Sem entrar em muitos detalhes do que é óbvio no rastreamento de pilha, que é o território do StackOverflow:

O problema é quase certamente o estado diferente do processo que um daemon possui, comparado a um programa que você executa a partir de um desktop ou shell. Variáveis de ambiente, o diretório atual, limites de recursos, identificadores de arquivos abertos, terminais de controle, diretório raiz e até mesmo grupos suplementares podem ser - e, na maioria deles - diferentes em um processo do daemon executado a partir de um supervisor de daemon de um processo invocado em um sessão de login.

Seu problema pode estar abaixo de qualquer diferença entre os dois. (Minha estimativa é de variáveis de ambiente, por causa do que está no rastreamento de pilha.) Mas essas diferenças são inerentes aos supervisores do daemon. A execução de daemons com estados de processo fixos e determináveis é parte de seu design. Se você substituir outro supervisor do daemon, ainda obterá um estado de processo controlado que não corresponde ao dos processos executados em sua sessão de login.

Você não deveria considerar alternativas para launchd . Você deve estar olhando para o seu plist e ajustando-o para configurar o material correto (provavelmente variáveis de ambiente, como eu disse) que seu driver ODBC espera ter disponível para ele. E você deveria estar lendo o 4D doco que existe. ☺

    
por 19.12.2013 / 23:23