diff --git a/src/built_in.c b/src/built_in.c
index 9a466e91501d5877107fb67e308275c4847bcb38..5c957021579e16e7a9ffebff3acab09e10271397 100644
--- a/src/built_in.c
+++ b/src/built_in.c
@@ -37,6 +37,7 @@ int do_fg(int argc, char** argv) {
     return -1;
 
   // TODO: Fill this.
+  
 
   return 0;
 }
diff --git a/src/commands.c b/src/commands.c
index 13e9c330aedcb9d3c1c0979a5b22fd7844516ada..09d5f0b54226f6585a6366ca55328ba7d22bfa24 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -2,9 +2,18 @@
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
-
+#include <sys/types.h>
+#include <unistd.h>
+#include <wait.h>
 #include "commands.h"
 #include "built_in.h"
+#include <errno.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <paths.h>
+
+#define SOCK_PATH "tpf_unix_sock.server"
+#define DATA "Hello from server"
 
 static struct built_in_command built_in_commands[] = {
   { "cd", do_cd, validate_cd_argv },
@@ -12,6 +21,8 @@ static struct built_in_command built_in_commands[] = {
   { "fg", do_fg, validate_fg_argv }
 };
 
+
+
 static int is_built_in_command(const char* command_name)
 {
   static const int n_built_in_commands = sizeof(built_in_commands) / sizeof(built_in_commands[0]);
@@ -30,31 +41,146 @@ static int is_built_in_command(const char* command_name)
  */
 int evaluate_command(int n_commands, struct single_command (*commands)[512])
 {
+
+  pid_t pid;
+
+  
+
+  // int server_sock, client_sock, len, rc;
+  // int bytes_rec = 0;
+  // struct sockaddr_un server_sockaddr;
+  // struct sockaddr_un client_sockaddr;
+  // char buf[256];
+  // int backlog = 10;
+  // memset(&server_sockaddr, 0, sizeof(struct sockaddr_un));
+  // memset(&client_sockaddr, 0, sizeof(struct sockaddr_un));
+  // memset(buf, 0, 256);
+
+  // //create unix domain stream socket
+  // server_sock = sockt(AF_UNIX, SOCK_STREAM, 0);
+  // if (server_sock == -1)
+  // {
+  //   printf("SOCKET ERROR: %d\n", sock_errno());
+  //   exit(1);
+  // }
+
+  // //set up the sockaddr structure, giving it a filepath to bind to
+  // server_sockaddr.sun_family = AF_UNIX;
+  // strcpy(server_sockaddr.sun_path, SOCK_PATH);
+  // len = sizeof(server_sockaddr);
+  // unlink(SOCK_PATH);
+  // rc = bind(server_sock, (struct sockaddr *) &server_sockaddr, len);
+  // if (rc == -1)
+  // {
+  //   printf("BIND ERROR = %d", sock_errno());
+  //   close(server_sock);
+  //   exit(1);
+  // }
+
+
+  // //read data on the server from clients and print the data that was read
+  // printf("waiting to recvfrom...\n");
+  // bytes_rec = recvfrom(server_sock, buf, 256, 0, (struct sockaddr *) &peer_sock, &len);
+  // if(bytes_rec = -1)
+  // {
+  //   printf("RECVFROM ERROR = %d", sock_errno());
+  //   close(server_sock);
+  //   exit(1);
+  // }
+  // else
+  // {
+  //   printf("DATA RECEIVED = %s\n", buf);
+  // }
+
+  // //close the socket and exit
+  // close(server_sock);
+
   if (n_commands > 0) {
     struct single_command* com = (*commands);
 
     assert(com->argc != 0);
 
     int built_in_pos = is_built_in_command(com->argv[0]);
+
+
+    
+
     if (built_in_pos != -1) {
-      if (built_in_commands[built_in_pos].command_validate(com->argc, com->argv)) {
-        if (built_in_commands[built_in_pos].command_do(com->argc, com->argv) != 0) {
+
+      if (built_in_commands[built_in_pos].command_validate(com->argc, com->argv)) 
+      {
+        if (built_in_commands[built_in_pos].command_do(com->argc, com->argv) != 0) 
+        {
           fprintf(stderr, "%s: Error occurs\n", com->argv[0]);
         }
-      } else {
+      } 
+      else 
+      {
         fprintf(stderr, "%s: Invalid arguments\n", com->argv[0]);
         return -1;
       }
-    } else if (strcmp(com->argv[0], "") == 0) {
+
+    }
+
+
+    else if (strcmp(com->argv[0], "") == 0) 
+    {
+
       return 0;
-    } else if (strcmp(com->argv[0], "exit") == 0) {
+    }
+
+    else if (strcmp(com->argv[0], "exit") == 0)
+    {
       return 1;
-    } else {
-      fprintf(stderr, "%s: command not found\n", com->argv[0]);
-      return -1;
+    } 
+    else 
+    {
+      pid = fork();
+      int status = 0;
+
+      if(pid < 0)
+      {
+        fprintf(stderr, "Fork failed.");
+        return 0;
+       
+      }
+
+
+      else if(pid == 0)
+      {
+        // char* path = "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:";
+        // char* saveptr = NULL;
+        // char* tok = strtok_r(path, ":", &saveptr);
+        // printf("%s",tok);
+        // while( tok != NULL)
+        // {
+        //   char* buf;
+        //   strcpy(buf, tok);
+        //   strcat(buf, "/");
+        //   strcat(buf, com->argv[0]);
+        //   execv(buf, com->argv);
+        //   tok = strtok_r(NULL, ":", &saveptr);
+        // }
+        execv(com->argv[0], com->argv);
+        fprintf(stderr, "%s: command not found\n", com->argv[0]);
+        exit(1);
+      }
+
+      else
+      {
+        wait(&status);
+              
+        return 0;
+      }
+      
     }
+
   }
 
+    
+
+   
+
   return 0;
 }
 
diff --git a/src/main.c b/src/main.c
index 77c78049273e013e278ad9021fa088531b636a97..88f55a81810c8fd45e347d117b585cf47723e73f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -6,11 +6,21 @@
 #include "built_in.h"
 #include "utils.h"
 
+#include "signal_handlers.h"
+#include <signal.h>
+#include <sys/types.h>
+#include <signal_handlers.h>
+
 int main()
 {
   char buf[8096];
 
   while (1) {
+    signal(SIGINT, (void*)catch_sigint);
+    signal(SIGTSTP, (void*)catch_sigtstp);
+    memset(buf, NULL,8096);
+
+
     fgets(buf, 8096, stdin);
 
     struct single_command commands[512];
@@ -25,6 +35,7 @@ int main()
     if (ret == 1) {
       break;
     }
+    
   }
 
   return 0;
diff --git a/src/signal_handlers.c b/src/signal_handlers.c
index 4b6fe2e073f327917964b5327b6649f74bcbda1e..c6ca0e111f952acde21d4e22d60f133fe9b2f012 100644
--- a/src/signal_handlers.c
+++ b/src/signal_handlers.c
@@ -1,11 +1,18 @@
 #include "signal_handlers.h"
+#include <signal.h>
+#include <sys/types.h>
+#include <signal_handlers.h>
+
 
 void catch_sigint(int signalNo)
 {
   // TODO: File this!
+	return 1;
 }
 
 void catch_sigtstp(int signalNo)
 {
   // TODO: File this!
+	
+	return 1;
 }