O que pode ser executado em segundo plano no linux?

1

Especificamente, as chamadas de função em um script bash são executadas em segundo plano se chamadas com &?

Eu estava tentando encontrar uma solução para Alterar um grupo de proprietários em arquivos e pensei em algo como o seguinte pode funcionar. Mas a chamada da função user_searcher () será executada em segundo plano?

  1 #!/bin/bash
  2 
  3 User1=1000
  4 User2=1001
  5 User3=1002
  6 
  7 user_searcher()
  8 {
  9         for fil in 'find $HOME -uid $ooser -type f'
 10         do
 11                 chown "NEWUSER$1" $fil
 12         done
 13 }
 14 
 15 PIDARRAY=()
 16 let i=1
 17 for ooser in $User1 $User2 $User3 ;
 18 do
 19         let i++
 20         user_searcher ooser i &
 21         PIDARRAY+=("$!")
 22 done    
 23 
 24 wait ${PIDARRAY[@]}
    
por trogdor 15.07.2017 / 04:48

1 resposta

0

man bash (Veja JOB CONTROL)

& is a control operator, meaning it performs a control function.

If a command is terminated by the control operator &, the shell executes the command in the background in a sub‐shell.

(A subshell is assigned a PID-Process ID Number)

Em suma, tudo o que é um comando pode ser solicitado para ser executado em segundo plano, finalizando o comando com & amp ;, que gera um processo de subshell para executar o comando.

Livremente, se ele puder ser executado autônomo em um shell, ele poderá ser executado em segundo plano em um subshell (o que & faz). Se é uma instrução completa para o subshell que a sua execução ou seqüência de instruções completas (função), então ele pode ser executado em segundo plano ... talvez eu vou ser corrigido aqui, mas é tentador dizer Se ele puder ser executado em primeiro plano em um shell, ele poderá ser executado em segundo plano em um subshell, com um escopo variável e personalizável para suas variáveis (contraste coproc vs & e consulte lastpipe , mas escopo de variáveis é um resultado de comandos em execução em subshells, não porque os comandos estão sendo executados em segundo plano).

O que constitui um comando?

De Guia do Bash da Wooledge :

BASH reads commands from its input (which is usually either a terminal or a file). Each line of input that it reads is treated as a command — an instruction to be carried out. (There are a few advanced cases, such as commands that span multiple lines, that will be gotten to later.) Bash divides each line into words that are demarcated by a whitespace character (spaces and tabs). The first word of the line is the name of the command to be executed. All the remaining words become arguments to that command (options, filenames, etc.).

De aosa-bash-full.pdf no bash-doc-3.2 de Fonte do Bash :

A “simple” shell command...consists of a command name, such as echo or cd, and a list of zero or more arguments and redirections. (pg 47)

Shell functions and shell scripts are both ways to name a group of commands and execute the group, just like executing any other command. Shell functions are declared using a special syntax and stored and executed in the same shell’s context; shell scripts are created by putting commands into a file and executing a new instance of the shell to interpret them. Shell functions share most of the execution context with the shell that calls them, but shell scripts, since they are interpreted by a new shell invocation, share only what is passed between processes in the environment. (pg 48)

....................

Bash introduces the concept of a job which is essentially a command being executed by one or more processes. A pipeline, for instance, uses one process for each element of the pipeline. The process group is a way to join separate processes together into a single job. The terminal has a process group ID associated with it, so the foreground process group is the one whose process group ID is the same as the terminal’s. (pg 69)

  • Qualquer processo pode ser executado em segundo plano
  • um shell em si é um processo
  • qualquer instrução / comando (ainda vagamente definido) dentro de um shell pode ser executado em segundo plano, executando-o no subshell que & desova.

A maior consideração é como o processo de subshell de fundo interage com seu processo pai, novamente, veja Job Control no man bash

    
por 16.07.2017 / 04:08