1) Jakie wartości zwraca fork i co one oznaczają?
Bo wartość różna od zera wcale nie oznacza błędu...
Nawet inaczej. Musi zostać zwrócona w jednym z procesów inna wartość.
man fork
2)
if (dziecko==0) {
printf ("Ja dziecko ginę\\n");
Nie bardzo rozumiem związek między komunikatem a wykonywaniem programu.
3)
execve ("/usr/ls", NULL, NULL);
exit(0);
Przeczytaj dokumentację funkcji execve. Generalnie jeśli wykona się linijka exit(0) to znaczy że wystąpił błąd. To jedno.
Drugie: zamiast używać execve, byż może będzie Ci wygodniej skorzystać z innej funkcji:
execl, execlp, execle, execv, execvp
Trzecie: Należałoby jednak przekazać przynajmniej jeden argument przez argv -- nazwę programu.
4)
Lecz oczywiście to nie wychodziło:
Oczywiście == ??
5) Należy obsłużyc zakończenie się każdego z procesów potomnych.
(czego tu nie robisz)
Słowa kluczowe: proces zombie, wait, SIGCHLD