Existem três maneiras de fazer isso.
Use um comando de carregamento de corrente adequado.
Em vez de usar o comando interno shell ulimit , use comandos que foram desenvolvidos para esse propósito, a partir de vários conjuntos de ferramentas daemontools-family :
-
softlimitdo daemontools -
softlimitdo freedt -
softlimitdo daemontools-encore -
softlimitdo nosh -
s6-softlimitde s6 -
chpstdo runit -
runlimitdo perp
Então, um seria executado, usando softlimit do conjunto de ferramentas como um exemplo:
gnome-terminal -t A --tab -e "softlimit --coresize unlimited ./app1"
Use um subshell dentro do script.
Isso também aplica o limite ao processo do emulador de terminal. Neste caso, isso será bastante benigno. Mas se alguém estiver aplicando outros limites, como limites de identificadores de arquivos abertos ou limites de bifurcação de processos, isso pode ser problemático.
(ulimit -c unlimited ; urxvt -e "./app1")
Note que isto não funcionará com o Terminal GNOME ou com a variante cliente-servidor do Unicode RXVT . Ambos não invocam diretamente o emulador de terminal como filho do seu script. Eles executam uma chamada remota por meio de um processo do servidor, que não terá nem adquirirá os limites de recursos definidos no seu script.
Faça o Terminal GNOME executar um shell que executa ulimit .
Lembre-se de que você precisa construir isso de baixo para cima.
- Você deseja que o shell real que executa o trabalho execute a lista de comandos
ulimit -c unlimited ; exec "./app1"
- Para passar essa lista de comandos para
sh, ele precisa ser todos um argumento após-c, portanto, precisa ser citado:sh -c "ulimit -c unlimited ; exec \"./app1\""
- Para passar a invocação
shpara o Terminal GNOME, isso também precisa ser todos um argumento após-e, então um segundo nível de cotação precisa ser aplicado:gnome-terminal -e 'sh -c "ulimit -c unlimited ; exec \"./app1\""'