{"id":20432802,"url":"https://github.com/bieanimaton/codigos_c_processos_e_filhos_tradicionais_linux","last_synced_at":"2026-05-10T17:40:40.982Z","repository":{"id":244945600,"uuid":"531987306","full_name":"BieAnimaton/codigos_C_processos_e_filhos_tradicionais_linux","owner":"BieAnimaton","description":"Códigos feitos em C na matéria de Sistemas Operacionais II para criar e manipular processos tradicionais e filhos tradicionais no Linux (distribuição usada: Slax)","archived":false,"fork":false,"pushed_at":"2022-09-09T19:36:26.000Z","size":8,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-15T18:41:44.425Z","etag":null,"topics":["exit","fork","getpid","getppid","pidt","sys","systypes","types","waitpid"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BieAnimaton.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-02T15:47:24.000Z","updated_at":"2022-09-15T19:03:39.000Z","dependencies_parsed_at":"2024-06-18T14:31:34.696Z","dependency_job_id":"89b74e08-56f4-40c5-be5a-fbe0fe505b4c","html_url":"https://github.com/BieAnimaton/codigos_C_processos_e_filhos_tradicionais_linux","commit_stats":null,"previous_names":["bieanimaton/codigos_c_processos_e_filhos_tradicionais_linux"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BieAnimaton%2Fcodigos_C_processos_e_filhos_tradicionais_linux","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BieAnimaton%2Fcodigos_C_processos_e_filhos_tradicionais_linux/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BieAnimaton%2Fcodigos_C_processos_e_filhos_tradicionais_linux/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BieAnimaton%2Fcodigos_C_processos_e_filhos_tradicionais_linux/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BieAnimaton","download_url":"https://codeload.github.com/BieAnimaton/codigos_C_processos_e_filhos_tradicionais_linux/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241975434,"owners_count":20051480,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["exit","fork","getpid","getppid","pidt","sys","systypes","types","waitpid"],"created_at":"2024-11-15T08:16:42.754Z","updated_at":"2026-05-10T17:40:40.945Z","avatar_url":"https://github.com/BieAnimaton.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Criando processos e filhos \nCódigos feitos em C para criar e manipular processos tradicionais e filhos tradicionais no Linux (distro usada: Slax)\n\n# Observações adicionais:\nPara compilar: `cc progN.c -o progN`  \nPara executar: `./progN`\n\n## Comando para criar processo filho através do Gerenciador de Processos.\n```\n...\nfork();\n...\n```\nCaso seja colocado dentro de um laço, vai criar filhos até o computador travar (consumir toda a memória).... então, nem pensar ＞︿＜.\n\n\n## Criando variável \"var\" do tipo \"pid_t\" para armazenar o valor retornado do \"fork()\".\n```\npid_t var;\n...\nvar = fork();\n...\n```\nA \"var\" do filho copia \"var\" do pai, ou seja, \"var\" do filho é igual a 0, PORÉM, \"var\" do pai recebe o \"PID\" do processo filho e é alterado  \n- **\"var\" do filho = 0**  \n- **\"var\" do pai = 18463** (PID do filho - número escolhido aleatoriamente)\n\n## Criar condição para apenas o filho executar.\n```\npid_t var;\n...\nvar = fork();\nif (var == 0) {\n  printf(\"Sou o processo filho\");\n  sleep(2);\n  ...\n}\nsleep(3);\nprintf(\"Sou o processo pai\");\n...\n```\nCaso não coloquemos nenhum comando de finalização no bloco do filho, o próprio filho \"escaprá\" de seu bloco e executará o `printf()` de fora, ou seja, a linha do pai.  \n\nAo rodarmos o exemplo, a frase \"Sou o processo pai\" é impressa duas vezes (uma depois de 3 segundos - pelo pai - e a outra depois da finalização do programa - pelo filho -).\n## Comando para finalização do processo filho.\n```\npid_t var;\n...\nvar = fork();\nif (var == 0) {\n  printf(\"Sou o processo filho\");\n  sleep(2);\n  ...\n  exit(0);\n}\nsleep(3);\nprintf(\"Sou o processo pai\");\n...\n```\nO comando `exit(0);` é mais aconselhado para esta tarefa.\n## Imprimindo identificadores do próprio processo e do processo pai.\n```\npid_t var;\n...\nvar = fork();\nif (var == 0) {\n\tprintf(\"O meu PID e %d.\\n\",getpid());\n\tprintf(\"O PID do meu PAI e %d.\\n\", getppid());\n  ..\n  exit(0);\n}\nsleep(3);\nprintf(\"Sou o processo pai\");\n...\n```\n- `getpid()`: retorna o PID (identificador) do processo  \n- `getppid()`: retorna o PID (identificador) do pai (parent) do processo  \n## Usar \"sleep(N);\" não é recomendado - usar \"waitpid(x, y, 0);.\n```\npid_t var;\nint estado;\n...\nvar = fork();\nif (var == 0) {\n\tprintf(\"O meu PID e %d.\\n\",getpid());\n\tprintf(\"O PID do meu PAI e %d.\\n\", getppid());\n  ..\n  exit(0);\n}\nwaitpid(var, estado, 0)\nprintf(\"Sou o processo pai\");\n...\n```\nO comando `waitpid()` segue a seguinte lógica: quando o \"estado\" de \"var\" for 0, encerrar o filho.  \n## Variáveis não são compartilhadas.\nComo estamos trabalhando com processos **TRADICIONAIS**, precisamos lembrar que o filho é uma copia por completo do pai, mas não compartilham nada entre si.  \n```\npid_t filho1, filho2;\nint estado, valor = 10;\n\nfilho1 = fork();\nif (filho1 == 0) {\n   valor = valor + 5;\n   printf(\"Processo-Filho 1: O valor de VALOR e %d.\\n\", valor);\n   sleep(5);\n   printf(\"Processo-Filho 1: Encerrando a execucao.\\n\");\n   exit(0);\n}\n\nfilho2 = fork();\nif (filho2 == 0) {\n   valor = valor - 2;\n   printf(\"Processo-Filho 2: O valor de VALOR e %d.\\n\", valor);\n   sleep(5);\n   printf(\"Processo-Filho 2: Encerrando a execucao.\\n\");\n   exit(0);\n}\n\nwaitpid(filho1,estado,0);\nwaitpid(filho2,estado,0);\n\nprintf(\"Sou o processo pai\");\nprintf(\"Processo-Pai: O valor de VALOR e %d.\\n\",valor);\n...\n```\nNo exemplo acima, como os dados não são compartilhados, ou seja, o pai e cada filho têm o seu próprio \"valor\", a saída na tela ficará da seguinte forma:  \n- **\"filho1\" vai dizer que seu \"valor\" é 15,**  \n- **\"filho2\" vai dizer que seu \"valor\" é 8 e**  \n- **\"pai\" vai dizer que seu \"valor\" é 10**","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbieanimaton%2Fcodigos_c_processos_e_filhos_tradicionais_linux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbieanimaton%2Fcodigos_c_processos_e_filhos_tradicionais_linux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbieanimaton%2Fcodigos_c_processos_e_filhos_tradicionais_linux/lists"}