Added 13,15
This commit is contained in:
parent
f1abb7ec54
commit
2e5758eb98
28
processes/.vscode/tasks.json
vendored
Normal file
28
processes/.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,28 @@
|
||||
{
|
||||
"tasks": [
|
||||
{
|
||||
"type": "cppbuild",
|
||||
"label": "C/C++: gcc build active file",
|
||||
"command": "/usr/bin/gcc",
|
||||
"args": [
|
||||
"-fdiagnostics-color=always",
|
||||
"-g",
|
||||
"${file}",
|
||||
"-o",
|
||||
"${fileDirname}/${fileBasenameNoExtension}"
|
||||
],
|
||||
"options": {
|
||||
"cwd": "${fileDirname}"
|
||||
},
|
||||
"problemMatcher": [
|
||||
"$gcc"
|
||||
],
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"detail": "Task generated by Debugger."
|
||||
}
|
||||
],
|
||||
"version": "2.0.0"
|
||||
}
|
BIN
processes/13
Executable file
BIN
processes/13
Executable file
Binary file not shown.
50
processes/13.c
Normal file
50
processes/13.c
Normal file
@ -0,0 +1,50 @@
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <signal.h>
|
||||
#include <sys/wait.h>
|
||||
#include <stdlib.h>
|
||||
/* Program tworzy proces potomny, potem tworzy proces potomny procesu potomnego. Proces
|
||||
macierzysty zmiania standardową funkcję obsługi sygnału wywoływanego przy zakończeniu
|
||||
procesu potomnego. Proszę zwrócić uwagę na fakt, że niestandardowa funkcja obsługi sygnału
|
||||
jest ważna tylko do pierwszego jej użycia, potem jest używana ponownie standardowa funkcja
|
||||
obsługi sygnału. Aby ciągle była używana niestandardowa funcja obsługi sygnału, należy w
|
||||
niestandardowej funkcji obsługi sygnału rejestrować ją jako funkcję obsługi sygnału dla tego
|
||||
konkretnego sygnału.
|
||||
*/
|
||||
void dziecko(int i)
|
||||
{
|
||||
printf("Dostalem sygnal, numer procesu %d. i:%d\n", getpid(), i);
|
||||
wait(NULL);
|
||||
// signal(SIGCHLD, dziecko);
|
||||
}
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int pid = 0, ppid;
|
||||
ppid = getpid();
|
||||
printf("Przed wywolaniem funkcji fork. Rodzic ma numer %d.\n", ppid);
|
||||
signal(SIGCHLD, dziecko);
|
||||
if ((pid = fork()) == -1)
|
||||
{
|
||||
perror("Pomyslne zakonczenie funkcji fork nie jest mozliwe.\n");
|
||||
exit(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pid != 0)
|
||||
{
|
||||
sleep(10);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Dziecko ma numer %d.\n", getpid());
|
||||
sleep(2);
|
||||
pid = fork();
|
||||
if (pid != 0)
|
||||
{
|
||||
printf("Dziecko dziecka ma numer %d.\n", pid);
|
||||
sleep(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
BIN
processes/15
Executable file
BIN
processes/15
Executable file
Binary file not shown.
41
processes/15.c
Normal file
41
processes/15.c
Normal file
@ -0,0 +1,41 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/wait.h>
|
||||
/* Program tworzy proces potomny i uruchamia zadane polecenie w ramach procesu potomnego.
|
||||
Przykladowe wywolanie programu: a.out cal 10 2024. */
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
char **polecenie;
|
||||
long i = 0;
|
||||
int pid;
|
||||
polecenie = (char **)malloc(sizeof(char *) * argc);
|
||||
while (i < argc - 1)
|
||||
{
|
||||
polecenie[i] = argv[i + 1];
|
||||
i++;
|
||||
}
|
||||
polecenie[i] = NULL;
|
||||
if ((pid = fork()) == -1)
|
||||
{
|
||||
perror("Pomyslne zakonczenie funkcji fork nie jest mozliwe.\n");
|
||||
exit(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pid == 0)
|
||||
{
|
||||
execvp(polecenie[0], polecenie);
|
||||
}
|
||||
else
|
||||
{
|
||||
waitpid((pid_t)-1, NULL, 0);
|
||||
printf("\nPolecenie wraz z argumentami zostalo wykonane.\n");
|
||||
}
|
||||
}
|
||||
printf("polecenie addr: %d\n", getppid());
|
||||
free(polecenie);
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user