Skip to content



dup3 - duplicate a file descriptor.


The dup3() system call creates a copy of the given file descriptor oldfd, and uses the given flags argument to control the behavior of the copy. It then stores the copy as newfd.

The advantage of using dup3() over dup2() is that the file descriptor flags are not copied over to the duplicate file descriptor. The flags argument can be used to set new flags on the duplicate fd, but they do not affect the original file descriptor. Any special requests (such as asking for a non-blocking file descriptor) can be set with flags.

Duplicating a file descriptor which has already been closed results in an error.


  • oldfd:int[K,U] - the file descriptor to duplicate.
  • newfd:int[K,U] - the new file descriptor.
  • flags:int - flags that control how the descriptor is handled.

Available Tags

  • K - Originated from kernel-space.
  • U - Originated from user space (for example, pointer to user space memory used to get it)






To observe when a process attempts to duplicate a file descriptor.

Example Use Case

Monitoring application performance can be improved by identifying when a process is spending too much time duplicating file descriptors. A trace can be taken of any process that is seen to repeatedly call dup3(), and the root cause of the inefficiency can be investigated.


No notable issues have been found with the dup3() system call.

The dup2() system call creates a copy of a file descriptor with the same flags as the original, and can be used as an alternative to dup3().

This document was automatically generated by OpenAI and needs review. It might not be accurate and might contain errors. The authors of Tracee recommend that the user reads the "events.go" source file to understand the events and their arguments better.