|
|
| Line 1: |
Line 1: |
| − | {{TOCright}}
| |
| − | '''fork()''' is one of several functions to "spawn" a process
| |
| − | =Use of fork=
| |
| − | [[Fork system call|fork()]] creates a new process by duplicating the calling process. The new process is referred to as the child process. The calling process is referred to as the parent process.
| |
| − | *PID - Process ID - the ID of a running process
| |
| − | *PPID - Parent Process ID - default the ID of the process that created this process or 1 if the parent died.
| |
| − | <source lang=c line>
| |
| − | #include <stdio.h>
| |
| − | #include <sys/types.h>
| |
| − | #include <unistd.h>
| |
| | | | |
| | | | |
| − | int main(void) {
| |
| − | printf("I am parent - my PPID is %d and my PID is %d\n", getppid(), getpid() );
| |
| − |
| |
| − | if (fork() == 0) {
| |
| − | printf("I am child - my PPID is %d and my PID is %d\n", getppid(), getpid() );
| |
| − | printf("Child dying\n");
| |
| − | return(0);
| |
| − | }
| |
| − | printf("parent dying\n");
| |
| − | return(0);
| |
| − | }
| |
| − | </source>
| |
| − |
| |
| − | ==Example of creating a daemon in Linux==
| |
| − | {{:Daemon linux}}
| |
| − |
| |
| − | =Example of creating several processes=
| |
| − | See same example in [[Bash processes#example|bash]]
| |
| − | <source lang=c line>
| |
| − | #include <stdio.h>
| |
| − | #include <sys/types.h>
| |
| − | #include <unistd.h>
| |
| − | #include <wait.h>
| |
| − |
| |
| − | void childprocess(char *name, int count_to) {
| |
| − | int counter = 0;
| |
| − |
| |
| − | printf("My name is %s and my PID is %d\n", name, getpid());
| |
| − |
| |
| − | while (counter < count_to) {
| |
| − | sleep(1);
| |
| − | counter = counter +1;
| |
| − | printf("%s counted to %i\n", name, counter);
| |
| − | }
| |
| − | printf("%s signing off\n", name);
| |
| − | }
| |
| − |
| |
| − |
| |
| − | int main(void) {
| |
| − | int wstatus; // Used by c wait function
| |
| − |
| |
| − | printf("I am the main function and my PID is %i\n", getpid());
| |
| − |
| |
| − | if (fork() == 0) { // fork returns 0 for child
| |
| − | childprocess("Hans", 5);
| |
| − | return(0); // Child process finished
| |
| − | }
| |
| − |
| |
| − | if (fork() == 0) {
| |
| − | childprocess("Ulla", 3);
| |
| − | return(0);
| |
| − | }
| |
| − |
| |
| − | while(wait(&wstatus) > 0);
| |
| − | printf("Main signing off\n");
| |
| − | return(0);
| |
| − | }
| |
| − |
| |
| − | </source>
| |
| | =Advanced= | | =Advanced= |
| | | | |
| Line 81: |
Line 12: |
| | ... | | ... |
| | </source> | | </source> |
| | + | [[Category:Linux]][[Category:C]] |
// Changing the name of running proces
#include <sys/prctl.h>
...
prctl(PR_SET_NAME, "newname");
...