/ / Bash Daemon Com o nome “sh” ou “sleep”, não o nome do arquivo - bash, process

Bash Daemon Com o nome “sh” ou “sleep”, não o nome do arquivo - bash, process

Eu criei um script bash simples, chmod + x, e com sucesso estou executando-o como um serviço de segundo plano.

Mas o script é chamado de "sh" ou "sleep" ou qualquer comando que pareça estar em execução no momento, não o nome do meu script, quando eu visualizo uma lista de processos.

Como faço para nomear o processo do meu script bash para que eu possa diferenciá-lo? Quero ter certeza de que não estou executando o script mais de uma vez.

Eu sou muito novo para bash scripting ... desculpe se esta é uma pergunta idiota.

Eu estou usando o #! / Bin / bash

Respostas:

1 para resposta № 1

Seu shell pai estará funcionando o tempo todo. Isso será sh. Quaisquer outros processos gerados por esse shell também serão executados. Tente pstree para mostrar os relacionamentos pai-filho.

BTW, se você usar os recursos específicos do bash que não estão no shell Bourne do POSIX, você deve usar #! / Bin / bash, não #! / Bin / sh. Alguns sistemas têm bash, mas têm um peso mais leve / bin / sh.

Eu sou muito novo para bash scripting ... desculpe se esta é uma pergunta idiota.

Não é burro. Básico, mas somente quando você entender como os processos Unix funcionam (e como o que você está usando no OS X mostra nomes de serviço, já que não é uma palavra que faça sentido em qualquer contexto Unix nesta situação. Então você está lidando com uma quantidade razoável de complexidade, e eu não te culpo por perguntar.

Talvez o OS X examine os líderes de grupos de processos ou algo para criar um "nome de serviço", se é isso que realmente chama. pensar esse seria o nome do processo de qualquerprocesso está sendo executado em primeiro plano (ou seja, que você não se separou com & no final dele, portanto, o shell está esperando por ele antes de executar o próximo comando).


2 para resposta № 2

Você tem um "shebang" no seu roteiro?

Eu fiz um pequeno teste. Eu achei que sem shebang, o script de teste mostrou em ps Como seja qual for o comando que estava sendo executado no momento. No entanto, se eu, como costumo fazer, coloco:

#!/bin/bash

ou

#!/bin/sh

(que no meu sistema é um link simbólico para /bin/dash) como a primeira linha do script, então o script apareceu sob seu próprio nome na saída de ps.


1 para resposta № 3

Desde que o ps também mostra que eu tenho um palpite de que você está sem sorte. Desculpe, mas os scripts de shell não podem alterar o nome aparente do processo.

No entanto, para os casos que mostram bash, você pode criar um link simbólico para basear um nome descritivo em seu script e invocar seu script por meio desse link simbólico.


0 para a resposta № 4

Não tenho certeza de quão portátil minha solução será, mas funciona no Linux.

Se você realmente quer fazer isso (talvez você queiraser capaz de matar o seu processo procurando por nome), você pode escrever um pequeno programa em C para chamar o shell com um nome de processo diferente. Por exemplo ...

#include <unistd.h>
#include <stdio.h>

int main(int argc, char **argv)
{
if (argv[1])
{
argv[0] = argv[1];
return execvp("sh", argv);
}
else
{
fprintf(stderr, "usage: %s <script> [args]n", argv[0]);
return 1;
}
}

Diga que é chamado wrapper.c. Você pode compilar com:

gcc -o wrapper wrapper.c

Então você pode correr:

./wrapper ./my-script

E verifique top ou ps. Deve ter um nome de programa "forjado" ..

Agora ... Se você realmente quer fazer isso? Eu não sei. Provavelmente não vale a pena. A maioria das pessoas não se incomoda com esse tipo de coisa.