=>Detecting "dead connections" and disconnecting Oracle sessions in performed in two places, the PMON process, and via SQL*Net, by the sqlnet_expire_time parameter.
Note that there are many caveats to dead connection detection and session termination, depending on the nature of the connection (SQL*Net, ODBC, OLE, OCI, &c).

=>Dead Connection detection in PMON :Oracle utilizes a background process knows as PMON which is responsible for terminating killed connections. Usually the answer to "how long" is whenever PMON gets to it.
As it detects aborted processes, it will rollback its transactions, release locks, latches, and memory, and finally kill the process itself.

Since PMON also has other tasks that it performs, I have seen this take a while at times; however, the longest I have seen an aborted process hold on before PMON got to it was about 10 minutes.

=>Dead Connection detection with SQL*Net :We also have the sqlnet_expire_time (in your sqlnet.ora) and the dead connection cleanup utility. You can specify a timeout interval by placing the sqlnet_expire_time
parameter in your sqlnet.ora file. For example, setting sqlnet_expire_time=2 will poll the SQL*Net client every two minutes and disconnect the session if there is no activity

Also by running this query , you can get the DEAD Session, which are not cleared..Normally PMON Process clearout the dead sessions.

select * from x$ktuxe where ktuxecfl='DEAD';