This is very useful when you want to monitor the progress of your Database backup or restore progress status especially on large databases where it normally takes a longer time to finish than usual.
Use the script below and run it on the SQL Instance where the backup is running.
SELECT session_id AS SPID
, command
, a.text AS Query
, start_time, percent_complete
, DATEADD(SECOND,estimated_completion_time/1000, GETDATE()) AS estimated_completion_time
FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a
WHERE r.command IN('BACKUP DATABASE','RESTORE DATABASE')
--OR below WHERE clause can be use as well.
--where r.command like '%backup%'
--or r.command like '%restore%'
Huge credit to this post.