Como as tarefas podem criar pid quando o programa ainda não está em execução?

2

Eu quero limitar a capacidade de processamento para apenas um único núcleo em minha máquina, então descobri que taskset pode ajudar a definir um único núcleo, digamos core 0, como o seguinte (Cortesia para este answer ):

taskset -c 0 -p 45678

O problema é que como posso determinar o pid process_id aqui quando meu programa ainda não está em execução? Apenas definimos um id de processo arbitrário para ser escolhido pelo Linux, neste caso 45678 ? Se for assim, é possível fazer isso em um script de shell como o seguinte:

#!/bin/sh
# Set the processing unit
taskset -c 0 -p 45678

# run python script
python main.py
    
por Katherine 06.05.2018 / 18:55

1 resposta

6

Você não pode chamar taskset para gravar as configurações a serem usadas em um processo futuro. Este modo de chamar taskset é apenas para processos atualmente em execução.

Para fixar um novo processo em um núcleo, chame taskset em seu modo direto. Você chama taskset e diz qual programa executar.

taskset -c 0 python main.py

A maneira como funciona é:

  1. O shell (ou outro programa de chamada) cria um novo processo ( fork ) para executar ( execve ) taskset -c 0 python main.py .
  2. O processo que está executando taskset aplica as configurações principais a si mesmo.
  3. O processo é executado ( execve novamente) python main.py no mesmo processo.

Esta é a maneira como outras configurações por processo são feitas: variáveis de ambiente quando você as define para um único processo (por exemplo, com env ) ao invés de uma sessão de shell (por exemplo, com export ), CPU niceness com nice , redirecionamentos (o que geralmente é feito através da sintaxe do shell, em vez de com um utilitário separado), etc.

    
por 06.05.2018 / 19:18