Não está claro o que você está perguntando, mas vejo várias possíveis fontes de problemas aqui.
Vamos deixar seus complicados comandos kill
fora do caminho. Este não é o problema real, mas tornará o resto da resposta - e sua eventual solução - mais clara se você mudar para pkill
. Ele faz a mesma coisa que seu pipeline ps
+ grep
+ awk
+ kill
em um único comando. Não só é mais eficiente e fácil de digitar, como também não requer nenhum truque de regex para filtrar o comando grep
dos resultados ps
, o que é um erro comum que faz com que o pipeline seja quebrado antecipadamente, deixando processos correndo que deveria ser morto. Seu padrão grep
evita esse erro, mas é fácil esquecer a necessidade. Eu vejo pela sua pergunta que você está no OS X, então você faz tem pkill
. Você precisa coincidir com argumentos para o comando em vez de no nome do processo, mas você pode fazer isso com o sinalizador -f
.
Com isso fora do caminho, a primeira fonte provável de seu problema é que seu comando inicial pode estar saindo com um código de erro. Como você está usando o operador &&
, os comandos subsequentes só serão executados se o primeiro retornar um código de saída 0, significando "nenhum erro". Se você quiser que esses comandos sejam executados independentemente, será necessário usar ;
:
./myprogram ;
sleep 20 &&
pkill -f explorer.exe &&
pkill -f winewrapper.exe
Observe que é possível misturar os dois estilos. Estamos dizendo: "Execute myprogram
incondicionalmente, espere que ele saia e execute o resto dessas coisas, e todas elas devem retornar com êxito para continuar pela cadeia de comandos." sleep
nunca falhará, mas se a primeira etapa pkill
falhar e você quiser que a segunda seja executada, indique também a segunda &&
para ;
.
A outra possibilidade é que você esteja esperando que estes comandos kill
executem enquanto o Wine / CrossOver ainda estiver rodando Dishonored.exe
. Ou seja, você quer que a matança comece 20 segundos depois que o Wine começar, não 20 segundos depois que ele sair. A menos que este programa se afaste em segundo plano, você obterá o último comportamento. Se você quer o comportamento paralelo, você precisa de fundo o primeiro programa:
./myprogram &
sleep 20 &&
pkill -f explorer.exe &&
pkill -f winewrapper.exe
O &
encerra o primeiro comando como ;
no exemplo anterior, exceto pelo fato de o restante da cadeia de comando começar a ser executado assim que myprogram
for iniciado.