Manipulação de Processos


Informação complementar:

Esta aula tem por objetivo introduzir as operações básicas de manipulação de processos em ambientes Linux. Para tal, deverá implementar pequenos programas que respondam aos requisitos de cada uma das tarefas que se seguem. Para obter mais informação sobre as funções de sistema referidas, consulte as man-pages respetivas.

  1. Criar um novo processo: o programa deve criar um processo filho e ambos os processos (pai e filho) devem imprimir o seu PID, PPID e UID.
    Funções a ter em conta: fork(), getpid(), getppid() e getuid().
  2. Criar uma descendência directa de dois processos: o programa deve criar dois processos filho do processo original. Cada processo filho deve escrever o seu PID e o PID do processo pai.
  3. Criar uma descendência directa de N processos: generalize o programa anterior para que sejam criados N processos filho do processo original. O número N deverá ser passado como parâmetro da linha de comandos. Cada processo filho deve escrever o seu PID e o PID do processo pai.
  4. Criar uma série de N processos: o programa deve criar uma série de N processos, em que cada processo p cria o processo p+1. Por exemplo, para N=4, o 1º processo da série cria o 2º, o 2º cria o 3º e o 3º cria o 4º. Cada processo deve escrever o seu PID e o PID do processo pai.
  5. Criar um processo para executar um dado comando: o programa deve criar um processo filho para executar o comando ls -l.
    Funções a ter em conta: família de funções exec().
  6. Esperar pela terminação do filho: o programa deve criar um processo filho que deverá calcular a diferença entre o seu PID e o PID do pai, enviando o resultado desse cálculo ao processo pai. O processo pai deve esperar que o processo filho termine e imprimir o valor que lhe foi comunicado pelo filho. Comente a versatilidade e limitações da solução encontrada.
    Funções a ter em conta: exit() e wait().
    Sugestão: consulte a man-page da função wait(), com particular ênfase na parte relativa a macros associadas a essa função.