$ gcc -o thread thread.c -lpthread
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
main()
{
  int pid;
  if ((pid = fork()) == 0) {
  execl("/bin/ls", "ls", "/", 0);
  }
  else {
    wait(&pid);
  printf("Exec finished\n");
  }
}
#include <unistd.h>
#include <stdio.h>
int main()
{
  printf("Running ps with execlp\n");
  execlp("ps", "ps", "-ax", 0);
  printf("Done.\n");
  exit(0);
}
 
 .
.
 .
.
#include <pthread.h>
#include <stdio.h>
/* Parameters to print_function.  */
struct char_print_parms
{
  /* The character to print.  */
  char character;
  /* The number of times to print it.  */
  int count;
};
/* Prints a number of characters to stderr, as given by PARAMETERS,
   which is a pointer to a struct char_print_parms.  */
void* char_print (void* parameters)
{
  /* Cast the cookie pointer to the right type.  */
  struct char_print_parms* p = (struct char_print_parms*) parameters;
  int i;
  for (i = 0; i < p->count; ++i)
    fputc (p->character, stderr);
  return NULL;
}
int main ()
{
  pthread_t thread1_id;
  .......
  struct char_print_parms thread1_args;
  .......
  /* Create a new thread to print 30000 x's.  */
  thread1_args.character = 'x';
  thread1_args.count = 30000;
  .......
  /* Create a new thread to print 20000 o's.  */
  thread2_args.character = 'o';
  .......
  .......
  /* Make sure the first thread has finished.  */
  pthread_join (thread1_id, NULL);
  /* Make sure the second thread has finished.  */
  .......
  /* Now we can safely return.  */
  return 0;
}