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.