O que você quer dizer com "dormir"?
Se você quer dizer estado S (sono interrompível), isso significa que o processo está esperando por E / S. O processo está atualmente envolvido em uma chamada de sistema de bloqueio. Você não pode forçá-lo a "acordar" de uma maneira genérica - o que faria então? Acorda quando a operação de entrada ou saída que deseja fazer é possível (por exemplo, quando os dados estão disponíveis para leitura, quando um canal de gravação fica pronto, etc.).
Se você quer dizer estado T (parado), isso significa que o processo está atualmente suspenso. Você pode desassociá-lo enviando um sinal CONT (SIGCONT): kill -CONT PID
.
Os processos não "aleatoriamente vão dormir". Eles dormem quando não têm nada para fazer. Eles são suspensos se receberem um sinal que os impeça: SIGTSTP, SIGSTOP, SIGTTIN, SIGTTOU. Estes últimos dois sinais são enviados pela interface do terminal no kernel quando um processo em segundo plano tenta ler a partir do terminal (respectivamente gravar no terminal); Se você não está ciente disso, você pode pensar que o processo pára aleatoriamente. Se foi isso que aconteceu, você precisa trazê-lo para o primeiro plano; executar fg
no shell a partir do qual você iniciou o job em background, com o argumento correto para indicar o job do qual o processo faz parte, por exemplo fg %3
.
Os arquivos stat*
no /proc
do Linux são somente leitura e não estou ciente de quando eles eram graváveis. Eu não sei o que você poderia esperar para escrever lá. Os dados relatados por este arquivo são dados gerenciados pelo kernel, e alguns deles podem ser alterados mais ou menos diretamente pelo processo, mas não é algo que você possa modificar do lado de fora. Por exemplo, você não pode magicamente tornar um processo passível de execução.