Desconecte outro usuário sem mudar primeiro para esse usuário

28

Minha esposa usa contas separadas e troca rápida de usuário em um MBP executando 10.6. Às vezes, quero desconectá-la para liberar um pouco de RAM, mas gostaria de evitar o login como ela, o logout e o logon novamente como eu.

Eu vi uma solução terminal ... existe uma maneira melhor? Obrigado!

Richard Herron
fonte
5
Você precisa definir melhor "existe uma maneira melhor". Para mim, não muito (em termos de computador) é melhor que um terminal. Se você deseja um aplicativo, basta agrupar o comando terminal em um aplicativo de automação ou AppleScript.
2
@mankoff, bom ponto! Mas este não é um fórum do Arch Linux, então vamos assumir que eu quero uma solução GUI / embutida :). Mas, você está certo, eu posso escrever um shell script.
Richard Herron
2
Aqui está o link para a solução de script (eu o vi antes de postar, mas é de 2005, então assumi que agora esse recurso simples deve ter sido incorporado à GUI). forums.macrumors.com/showthread.php?t=118545
Richard Herron
não há como built-in solução gui que eu saiba ...
Robert S Ciaccio
OK, obrigado, tudo! Quando escrevo um bom roteiro, vou publicá-lo aqui.
Richard Herron

Respostas:

22

Usando o Terminal, você pode matar o loginwindowprocesso dela e todos os programas que ela abrir serão fechados ... mas isso fará com que ela perca qualquer trabalho não salvo que tenha! De fato, esse é o motivo pelo qual você precisa se conectar como ela para se desconectar: Quando você se conecta como ela, todos os programas dela novamente têm acesso à GUI, para que eles possam solicitar que você confirme o fechamento, salve as alterações ou faça outras alterações. ação antes de sair.

Se você tem certeza de que ela possui apenas coisas como um navegador da Web, iTunes, etc. aberto, não o Pages, Word, Photoshop ou qualquer outra coisa com documentos, tente no terminal:

kill `ps awwwwux | grep her_short_username | grep loginwindow | grep -v grep | awk "{ print \$2 }"`

No OSX 10.10.4: (leve edição do último comentário):

export pn=`ps awwwwux | awk '/her_short_username/ && /loginwind[o]w/ { print $2 }'`
sudo kill -9 $pn
Josh
fonte
1
Concorde com o aviso de que, se você não fizer login para ver o que ela está fazendo, não saberá o que pode custar a ela desconectando-a.
Michael H.
Sim você está certo. Na maioria das vezes, ele navega na web ... Mas uma vez não será! Obrigado!
Richard Herron
4
Se você forçar-rescindir o seu loginwindowmeio Activity Monitor.appvocê poderia convenientemente olhar ao mesmo tempo que outros processos que ela deixou em aberto.
Jari Keinänen 29/07
1
Se você acabar executando o Awk de qualquer maneira, os vários grepcomandos podem ser facilmente evitados. ps awwwwux | awk '/her_short_username/ && /loginwind[o]w/ { print $2 } | xargs kille ver também iki.fi/era/unix/award.html#grep
tripleee
1
apenas corrija um erro de digitação no seu comando atualizado, as leituras sududevem ser lidas sudo.
hoss
18

Você pode usar o Activity Monitor para desconectar outro usuário, matando o processo de login:

  1. Executar monitor de atividades
  2. No filtro no canto superior direito, digite loginwindow
  3. Clique na linha com o nome do usuário na coluna Usuário
  4. Clique em Quit Process , depois em Force Quit e digite sua senha.

Esta é apenas uma versão mais agradável (?) Da GUI da resposta de Josh .

Antes da etapa 2, você pode revisar os processos em execução do outro usuário para ver se estão executando aplicativos que possam perder dados ao sair.

Bennett McElwee
fonte
Eu tentei isso e ainda vejo os processos do outro usuário em execução no Activity Monitor. É verdade que a conta parece desconectada no menu de troca de usuário, mas não parece ser exatamente a mesma coisa que desconectar.
Gorb
8

Este comando é mais simples do que o sugerido e terá o resultado desejado para matar todos os processos do usuário (eu tive que executá-lo duas vezes)

sudo pkill -9 -u user

Se você quiser apenas interromper o processo da janela de login para esse usuário, faça o seguinte:

sudo pkill -9 -u user loginwindow

Ulukai
fonte
1
Parece-me que esta é uma resposta claramente melhor e mais idiomática (do ponto de vista unix sysadmin) do que as outras.
Gregg Leventhal
2

Eu acho que a maneira mais simples de fazer isso é: sudo killall -9 -u wifes_name

mempman
fonte
Usando o MacOS Mojave, esta é a única solução depois de tentar muitas que não apenas mataram o processo LoginWindow, mas muitos outros processos pertencentes a esse usuário. Matar o processo LoginWindow somente para esse usuário não matou muitos outros processos iniciados por esse usuário. Essa solução (substituindo pelo nome da minha esposa) se livrou de todos os processos iniciados pelo login dela. Parecido com a reinicialização da máquina e apenas fazendo o login.
i-CONICA 16/03
-1

Na minha opinião, a possível perda de dados supera em muito o possível ganho na RAM.

Além disso, já faz muito tempo desde que o Unix conseguiu trocar memória para disco quando um processo estava ocioso.

mouviciel
fonte
2
Um problema é que, quando um usuário é desligado, seus processos podem não estar ociosos. Eles podem estar consumindo CPU e memória. Os jogos parecem particularmente ruins a esse respeito.
Bennett McElwee
2
A pergunta menciona a esposa, mas na verdade existe um caso ainda melhor - quando você tem um filho que excedeu o limite de tempo do dia e só brinca e faz outras coisas que não precisam ser salvas. Agora você não apenas precisa fazer login como criança, mas também acrescenta tempo apenas para desconectá-los.
Michael
@ Michael Esse é exatamente o meu caso de uso. :)
Bennett McElwee