Could someone explain the difference between 'alter session kill ...' vs 'alter session disconnect ...'?

I had a database where connection from the app server exceed process limits. I found that many, many of the connection has been idle for over 200 hours.

So I decided to first 'kill' the sessions. I could then see in v$session that these sessions have a 'Killed', but they linger in the v$session. But also, I see all the O/S processes still there.

Then I decided to use 'disconnect'. This seemed to be really effective ... removing the session from v$session AND also removeing all the O/S process.

So I guess my reason question is ... why use 'kill' at all?