#include <sys/types.h>1#include <sys/wait.h>2#include <unistd.h>3#include <stdlib.h>45int my_system(const char *command)6{7int pid, status;89switch ((pid=fork()))10{11case -1:12//error forking return -1;13case 0:14{15const char *argv[] = {"/bin/bash", "-c", command, NULL};16execv("/bin/bash", (char *const *)argv);17/* exec se poate întoarce doar cu cod de eroare (de ex. când18nu se găseste fisierul de executat - în cazul nostru19/bin/bash. În caz de eroare, terminăm procesul copil */20exit(-1);21}22}2324//doar procesul părinte ajunge aici, si doar dacă fork() s-a terminat cu succes25waitpid(pid, &status, 0);2627// obtinem codul de eroare cu care s-a terminat copilul28if (WIFEXITED(status))29printf("Child %d terminated normally, with code %d\n", pid, WEXITSTATUS(status));3031return status;32}3334int main()35{36my_system("ls");37return 0;38}39404142