コマンドをファイルに出力するCプログラムを書いているのですがファイルに書き込まれません

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<fcntl.h>
#include<sys/wait.h>

int main(){
 int status;
 int fd;
 printf("Exec ps program.../\n");
 if((fd= open("processlist.txt",O_WRONLY|O_CREAT|O_TRUNC,0777))==-1){
  perror("open failed");
  exit(EXIT_FAILURE);
 }
 printf("close(1)\n");
 execlp("ps","ps","-e","-1",NULL);
 close(1);
 if(dup(fd)!=1){
  perror("dup failed");
  close(fd);
  exit(EXIT_FAILURE);
 }
 execlp("ps","ps","-e","-1",NULL);
 close(fd);
 printf("done,\n");
}

もし、出力を乗っ取れていなければ perror("dup failed");でその趣旨が出力されるのでしょうが、その出力はありません。
close(1);まで確実に到達していることは確認しました。
しかし最終的に出力されるファイルは空です。
プログラムを見なおしても原因がどこにあるのかわからないのですが、どんなことが原因として考えられますか