{"id":18867235,"url":"https://github.com/ahalic/vaccine-shell","last_synced_at":"2026-05-03T05:36:02.233Z","repository":{"id":120849589,"uuid":"368010227","full_name":"AHalic/Vaccine-Shell","owner":"AHalic","description":"Shell implementation ","archived":false,"fork":false,"pushed_at":"2021-05-02T01:53:09.000Z","size":184,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-30T22:32:02.371Z","etag":null,"topics":["c","shell"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":false,"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/AHalic.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":"2021-05-17T00:04:12.000Z","updated_at":"2022-03-15T17:56:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"fefe6f22-0ae9-4560-b157-7702c08bbb87","html_url":"https://github.com/AHalic/Vaccine-Shell","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AHalic%2FVaccine-Shell","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AHalic%2FVaccine-Shell/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AHalic%2FVaccine-Shell/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AHalic%2FVaccine-Shell/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AHalic","download_url":"https://codeload.github.com/AHalic/Vaccine-Shell/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239816478,"owners_count":19701753,"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":["c","shell"],"created_at":"2024-11-08T05:08:50.830Z","updated_at":"2026-02-13T10:30:17.922Z","avatar_url":"https://github.com/AHalic.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Vaccine Shell\n\nA Vaccine Shell é uma shell simples, que implementa alguns comandos específicos e processos de forma background e foreground, mais sobre eles nas seções seguintes. Cada linha de comando é iniciada pela string \"vsh\u003e \".\n\n## Como executar\n\nPara compilar a shell, é preciso rodar no terminal os seguintes comandos:\n\n```sh\nmake\nmake clean\n```\n\nCaso queira rodar o programa sem o uso do valgrind, é possível utilizar ```make run``` ou ```./vsh```. Para rodar o programa com valgrind, é possível utilizar ```make val```.\n\n## Processos\n\nOs processos podem ser ou em background ou em foregroud. Cada processo pode receber até 3 argumentos. Para rodar um programa em foreground é preciso escrever na linha de comando o nome do programa, sem uso de caracteres especiais, da seguinte forma:\n\n```ex.: \"./exec arg1 arg2 arg3\"```\n\nPara executar processos em background é preciso utilizar o caracter especial \" | \" para separar os comandos diferentes, na seguinte forma:\n\n```ex. \" prog1 | prog2\"```\n\nA saída de um processo é a entrada do processo seguinte. O primeiro processo recebe a entrada em stdin e o último processo imprime no stdout.\n\n## Comandos internos\n\nA Vaccine Shell possui dois comandos especiais:\n\n- armageddon;\n- liberamoita.\n\n### armageddon\n\nO comando armageddon é utilizado para terminar a execução da shell. Caso ela esteja executando alguns comandos em background, estes são terminados antes de encerrar a shell. Para usar o armageddon, é utilizada a função \"quit_shell\".\n\n### liberamoita\n\nCaso alguns processos deixarem zombies, o liberamoita pode ser utilizado para \"limpar\" tudo isso. Obs.: caso o processo pai do zombie ainda esteja em execução, ele não é terminado. Para usar o liberamoita, é utilizada a função \"destroy_zombies\".\n\n## Sinais e como são tratados \n\nA shell apresenta um tratador de sinais para os sinais SIGUSR1 e SIGUSR2 (o tratador se encontra na biblioteca vsh_handler, função handle_sigusr_vsh()). Enquanto um sinal do tipo SIGUSR1 ou SIGUSR2 for tratado, os sinais SIGINT, SIGQUIT e SIGTSTP são bloqueados. \n\nQuando um processo tiver executando em foreground, a shell ignora os sinais SIGINT, SIGQUIT e SIGTSTP. Quando ele termina de executar, a shell volta a receber os sinais.\n\nUm processo em background bloqueia os sinais SIGINT, SIGQUIT e SIGTSTP.\n\nOs sinais SIGUSR1 e SIGUSR2 tem efeitos diferentes em processos foreground e background. Em foreground eles são ignorados, já em background ao receber o sinal, o processo e seus irmãos serão terminados.\n\n## Bibliotecas\n\nPara rodar a Vaccine Shell é preciso ter as bibliotecas padrões de C, além de \"vsh_commands\", \"vsh_errors\", \"vsh_execute\", \"vsh_handler\", \"vsh_io\" e \"vsh_list\".\n\n### vsh commands\n\nNa biblioteca \"vsh_commands\", há 3 funções referentes a comandos internos da shell e liberação de memória, são elas:\n\n- quit_shell\n- destroy_zombies\n- destroy_commands\n\nAtráves de ```quit_shell``` é possível encerrar a shell e todos os processos que estavam sendo executados.\nA função ```destroy_zombie``` libera os processos zombies.\nA função ```destroy_commands``` libera a memória alocada para armazenar as strings referentes aos comandos lidos.\n\n### vsh errors\n\nA biblioteca \"vsh_errors\" é referente a identificação de erros. Ela possui 5 funções, são elas:\n\n- error_execvp: return 101;\n- error_pipe: return 102;\n- error_fork: return 103;\n- error_dup: return 104;\n- error_setsid: return 105.\n\n### vsh execute\n\nA biblioteca \"vsh_execute\" é referente as funções utilizadas para execução dos processos em background e foreground. Ela apresenta 2 funções (além de 2 estáticas utilizada para as auxiliar), são elas:\n\n- execute_command\n- execute_programs\n\nA função ```execute_programs``` é responsável pela execução de todos os processos informados na linha de comando. A função ```execute_command```, utilizada dentro da função anterior, execute apenas um processo, sendo ele background ou foregroud.\n\n### vsh handler\n\nA biblioteca \"vsh_handler\" é responsável pelas funções tratadoras de sinais, além das configurações das máscaras de sinais. Ela apresenta 5 funções:\n\n- handle_sigusr_vsh\n- configure_signals_vsh\n- configure_signals_vsh_sigusr\n- configure_signals_vsh_ignore\n- configure_signals_fg\n\nA função ```handle_sigusr_vsh``` apresenta a seguinte mensagem quando recebe SIGUSR1 ou SIGUSR2:\n\n```\n    _ _      (0)(0)-._  _.-'^^'^^'^^'^^'^^'--.\n   (.(.)----'`        ^^'                /^   ^^-._\n    (    `                 \\\\             |    _    ^^-._\n    VvvvvvvVv~~`__,/.._\u003e  /:/:/:/:/:/:/:/\\\\  (_..,______^^-.\n     `^^^^^^^^`/  /   /  /`^^^^^^^^^\u003e^^\u003e^`\u003e  \u003e        _`)  )\n              (((`   (((`          (((`  (((`        `'--'^\nI feel weird...\n```\n\nAs funções ```configure``` são para configurar os tratadores da shell e dos processos foreground. O ```configure_signals_vsh_sigusr``` é responsável por configurar a função de tratamento do SIGUSR1 e SIGUSR2 para a shell. O ```configure_signals_vsh``` faz com que SIGINT, SIGQUIT e SIGTSTP sejam os tratados da forma padrão. O ```configure_signals_vsh_ignore``` faz com que os sinais SIGINT, SIGQUIT e SIGTSTP sejam ignorados pela shell. O ```configure_signals_fg``` faz com que os processos foreground tratem SIGINT, SIGQUIT e SIGTSTP com os tratadores padrões. \n\n### vsh io\n\nA biblioteca \"vsh_io\" é responsável pelas funções referentes a entrada e saída como a impressão de \"vsh\u003e \" na linha de comando, além de leitura dos comandos e gerenciamento dos pipes (open e close). Ela apresenta 4 funções (e 2 estáticas):\n\n- show_command_line\n- read_command_line\n- close_pipe\n- open_pipe\n\nA função ```show_command_line``` é responsável pela impressão de \"vsh\u003e \". A função ```read_command_line``` é responsável pela leitura da linha de comando e o tratamento da string lida. A função ```close_pipe``` fecha os pipes (exceto um indicado como parâmetro) e a função ```open_pipe``` abre todos os pipes da matriz de pipe. \n\n## vsh list\n\nA biblioteca \"vsh_list\" apresenta a estrutura de dados lista encadeada e suas funções.  \n\n***\nTrabalho acessível no [github](https://github.com/luanagabrielescosta/Trabalho-SO), feito por Beatriz Maia, Luana Costa e Sophie Dilhon.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahalic%2Fvaccine-shell","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fahalic%2Fvaccine-shell","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahalic%2Fvaccine-shell/lists"}